Coverage for jstark/grocery_retailer_feature_generator.py: 100%

9 statements  

« prev     ^ index     » next       coverage.py v7.4.3, created at 2024-02-25 20:09 +0000

1from datetime import date 

2from typing import List, Union 

3 

4from jstark.feature_period import FeaturePeriod, PeriodUnitOfMeasure 

5from jstark.features import ( 

6 Count, 

7 NetSpend, 

8 GrossSpend, 

9 RecencyDays, 

10 BasketCount, 

11 StoreCount, 

12 ProductCount, 

13 CustomerCount, 

14 ChannelCount, 

15 ApproxCustomerCount, 

16 ApproxBasketCount, 

17 Discount, 

18 MinGrossSpend, 

19 MaxGrossSpend, 

20 MinNetSpend, 

21 MaxNetSpend, 

22 AverageGrossSpendPerBasket, 

23 Quantity, 

24 AvgQuantityPerBasket, 

25 MostRecentPurchaseDate, 

26 MinNetPrice, 

27 MaxNetPrice, 

28 MinGrossPrice, 

29 MaxGrossPrice, 

30 EarliestPurchaseDate, 

31 AvgDiscountPerBasket, 

32 AvgPurchaseCycle, 

33 CyclesSinceLastPurchase, 

34 BasketPeriods, 

35 RecencyWeightedBasket99, 

36 RecencyWeightedBasket90, 

37 RecencyWeightedBasket95, 

38 RecencyWeightedApproxBasket90, 

39 RecencyWeightedApproxBasket95, 

40 RecencyWeightedApproxBasket99, 

41 AverageBasket, 

42) 

43from jstark.feature_generator import FeatureGenerator 

44 

45 

46class GroceryRetailerFeatureGenerator(FeatureGenerator): 

47 def __init__( 

48 self, 

49 as_at: date, 

50 feature_periods: Union[List[FeaturePeriod], List[str]] = [ 

51 FeaturePeriod(PeriodUnitOfMeasure.DAY, 2, 0), 

52 FeaturePeriod(PeriodUnitOfMeasure.DAY, 4, 3), 

53 ], 

54 ) -> None: 

55 super().__init__(as_at, feature_periods) 

56 

57 # would prefer list[Type[Feature]] as type hint but 

58 # this only works on py3.10 and above 

59 FEATURE_CLASSES: list = [ 

60 Count, 

61 NetSpend, 

62 GrossSpend, 

63 RecencyDays, 

64 BasketCount, 

65 StoreCount, 

66 ProductCount, 

67 CustomerCount, 

68 ChannelCount, 

69 ApproxBasketCount, 

70 ApproxCustomerCount, 

71 Discount, 

72 MinGrossSpend, 

73 MaxGrossSpend, 

74 MinNetSpend, 

75 MaxNetSpend, 

76 AverageGrossSpendPerBasket, 

77 Quantity, 

78 AvgQuantityPerBasket, 

79 MostRecentPurchaseDate, 

80 MinNetPrice, 

81 MaxNetPrice, 

82 MinGrossPrice, 

83 MaxGrossPrice, 

84 EarliestPurchaseDate, 

85 AvgDiscountPerBasket, 

86 AvgPurchaseCycle, 

87 CyclesSinceLastPurchase, 

88 BasketPeriods, 

89 RecencyWeightedBasket95, 

90 RecencyWeightedBasket90, 

91 RecencyWeightedBasket99, 

92 RecencyWeightedApproxBasket95, 

93 RecencyWeightedApproxBasket90, 

94 RecencyWeightedApproxBasket99, 

95 AverageBasket, 

96 ]