mpa_score#
- empulse.metrics.mpa_score(y_true, y_score, *, contribution=8000, contact_cost=50, sales_cost=500, direct_selling=1, commission=0.1, check_input=True)[source]#
mpa
but only returning the MPA score.MPA presumes a situation where leads are targeted either directly or indirectly. Directly targeted leads are contacted and handled by the internal sales team. Indirectly targeted leads are contacted and then referred to intermediaries, which receive a commission. The company gains a contribution from a successful acquisition.
See also
mpa
: to also return the fraction of the leads that should be targeted to maximize profit.empa_score
: for a stochastic version of this metric.- Parameters:
- y_truearray-like of shape (n_samples,)
Binary target values (‘acquisition’: 1, ‘no acquisition’: 0).
- y_scorearray-like of shape (n_samples,)
Target scores, can either be probability estimates or non-thresholded decision values.
- contributionfloat, default=7000
Average contribution of a new customer (
contribution ≥ 0
).- sales_costfloat, default=500
Average sale conversion cost of targeted leads handled by the company (
sales_cost ≥ 0
).- contact_costfloat, default=50
Average contact cost of targeted leads (
contact_cost ≥ 0
).- direct_sellingfloat, default=1
Fraction of leads sold to directly (
0 ≤ direct_selling ≤ 1
).direct_selling = 0
for indirect channel.direct_selling = 1
for direct channel.- commissionfloat, default=0.1
Fraction of contribution paid to the intermediaries (
0 ≤ commission ≤ 1
).Note
The commission is only relevant when there is an indirect channel (
direct_selling < 1
).- check_inputbool, default=True
Perform input validation. Turning off improves performance, useful when using this metric as a loss function.
- Returns:
- empafloat
Expected Maximum Profit measure for customer Acquisition.
Examples
Direct channel:
>>> from empulse.metrics import mpa_score >>> >>> y_true = [0, 1, 0, 1, 0, 1, 0, 1] >>> y_score = [0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.8, 0.9] >>> mpa_score(y_true, y_score, direct_selling=1) 3706.25
Indirect channel using scorer:
>>> import numpy as np >>> from sklearn.datasets import make_classification >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.model_selection import cross_val_score, StratifiedKFold >>> from sklearn.metrics import make_scorer >>> from empulse.metrics import mpa_score >>> >>> X, y = make_classification(random_state=42) >>> model = LogisticRegression() >>> cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) >>> scorer = make_scorer( ... mpa_score, ... response_method='predict_proba', ... contribution=7_000, ... sales_cost=2_000, ... contact_cost=100, ... direct_selling=0, ... ) >>> np.mean(cross_val_score(model, X, y, cv=cv, scoring=scorer)) 3099.0