Coverage for jstark/features/average_purchase_cycle.py: 100%

17 statements  

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

1"""AveragePurchaseCycle feature""" 

2import pyspark.sql.functions as f 

3from pyspark.sql import Column 

4 

5from .feature import DerivedFeature 

6from .earliest_purchase_date import EarliestPurchaseDate 

7from .most_recent_purchase_date import MostRecentPurchaseDate 

8from .basket_count import BasketCount 

9 

10 

11class AvgPurchaseCycle(DerivedFeature): 

12 def column_expression(self) -> Column: 

13 return ( 

14 f.datediff( 

15 MostRecentPurchaseDate(self.as_at, self.feature_period).column, 

16 EarliestPurchaseDate(self.as_at, self.feature_period).column, 

17 ) 

18 ) / BasketCount(self.as_at, self.feature_period).column 

19 

20 @property 

21 def description_subject(self) -> str: 

22 return "Average purchase cycle" 

23 

24 @property 

25 def commentary(self) -> str: 

26 return ( 

27 "How often (measured in days) is a purchase made. This " 

28 + "is very useful to determine how often a customer buys " 

29 + "a particular product" 

30 ) 

31 

32 def default_value(self) -> Column: 

33 return f.lit(None)