|
@@ -9,7 +9,7 @@ from typing import List
|
|
|
import pandas as pd
|
|
|
|
|
|
from entitys import DataSplitEntity, MlConfigEntity, DataFeatureEntity
|
|
|
-from enums import ConstantEnum
|
|
|
+from enums import ConstantEnum, ModelEnum
|
|
|
from feature import FeatureStrategyFactory, FeatureStrategyBase
|
|
|
from init import init
|
|
|
from model import ModelBase, ModelFactory, f_add_rules, f_get_model_score_bin, f_calcu_model_psi
|
|
@@ -57,15 +57,21 @@ class Pipeline():
|
|
|
return self._model.score_rule(data)
|
|
|
|
|
|
def psi(self, x1: pd.DataFrame, x2: pd.DataFrame, points: List[float] = None) -> pd.DataFrame:
|
|
|
- if len(self._ml_config.rules) != 0:
|
|
|
- y1 = self.score_rule(x1)
|
|
|
- y2 = self.score_rule(x2)
|
|
|
+ if self._ml_config.model_type == ModelEnum.XGB.value:
|
|
|
+ y1 = self.prob(x1)
|
|
|
+ y2 = self.prob(x2)
|
|
|
+ sort_ascending = False
|
|
|
else:
|
|
|
- y1 = self.score(x1)
|
|
|
- y2 = self.score(x2)
|
|
|
+ sort_ascending = True
|
|
|
+ if len(self._ml_config.rules) != 0:
|
|
|
+ y1 = self.score_rule(x1)
|
|
|
+ y2 = self.score_rule(x2)
|
|
|
+ else:
|
|
|
+ y1 = self.score(x1)
|
|
|
+ y2 = self.score(x2)
|
|
|
x1_score_bin, score_bins = f_get_model_score_bin(x1, y1, points)
|
|
|
x2_score_bin, _ = f_get_model_score_bin(x2, y2, score_bins)
|
|
|
- model_psi = f_calcu_model_psi(x1_score_bin, x2_score_bin)
|
|
|
+ model_psi = f_calcu_model_psi(x1_score_bin, x2_score_bin, sort_ascending)
|
|
|
print(f"模型psi: {model_psi['psi'].sum()}")
|
|
|
return model_psi
|
|
|
|