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
« 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
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
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)
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 ]