Coverage for jstark/features/cycles_since_last_purchase.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"""CyclesSinceLastPurchase 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 CyclesSinceLastPurchase(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 "Cycles since last purchase"
24 @property
25 def commentary(self) -> str:
26 return (
27 "Days since last purchase divided by average purchase cycle. "
28 + "This may be a very good predictor of when a customer is "
29 + "likely to next buy a particular product."
30 )
32 def default_value(self) -> Column:
33 return f.lit(None)