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
« 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
5from .feature import DerivedFeature
6from .earliest_purchase_date import EarliestPurchaseDate
7from .most_recent_purchase_date import MostRecentPurchaseDate
8from .basket_count import BasketCount
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
20 @property
21 def description_subject(self) -> str:
22 return "Average purchase cycle"
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 )
32 def default_value(self) -> Column:
33 return f.lit(None)