|
@@ -12,7 +12,7 @@ import pandas as pd
|
|
|
import scorecardpy as sc
|
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
|
|
|
-from commom import f_df_to_image
|
|
|
+from commom import f_df_to_image, f_display_images_by_side
|
|
|
from entitys import DataPreparedEntity, MetricFucEntity, DataSplitEntity
|
|
|
from feature import f_calcu_model_ks, f_get_model_score_bin, f_calcu_model_psi
|
|
|
from .model_base import ModelBase
|
|
@@ -31,6 +31,7 @@ class ModelLr(ModelBase):
|
|
|
def train(self, data: DataPreparedEntity, *args, **kwargs) -> Dict[str, MetricFucEntity]:
|
|
|
bins = kwargs["bins"]
|
|
|
data_split_original: DataSplitEntity = kwargs["data_split_original"]
|
|
|
+ jupyter = kwargs["jupyter"]
|
|
|
|
|
|
# woe编码之前的数据
|
|
|
train_data_original = data_split_original.train_data
|
|
@@ -53,7 +54,7 @@ class ModelLr(ModelBase):
|
|
|
card_df = pd.concat((card_df, v))
|
|
|
card_df_path = self._train_config.f_get_save_path(f"card_df.png")
|
|
|
f_df_to_image(card_df, card_df_path)
|
|
|
- metric_value_dict["评分卡"] = MetricFucEntity(image_path=card_df_path)
|
|
|
+ metric_value_dict["评分卡"] = MetricFucEntity(table=card_df, image_path=card_df_path)
|
|
|
|
|
|
# 模型系数
|
|
|
coef = dict(zip(train_data.x_columns, self.lr.coef_.reshape(-1)))
|
|
@@ -97,19 +98,36 @@ class ModelLr(ModelBase):
|
|
|
train_data_gain = f_calcu_model_ks(train_data_original, y_column, sort_ascending=True)
|
|
|
train_data_gain_path = self._train_config.f_get_save_path(f"train_data_gain.png")
|
|
|
f_df_to_image(train_data_gain, train_data_gain_path)
|
|
|
- metric_value_dict["训练集分数分箱"] = MetricFucEntity(image_path=train_data_gain_path)
|
|
|
+ metric_value_dict["训练集分数分箱"] = MetricFucEntity(table=train_data_gain, image_path=train_data_gain_path)
|
|
|
if test_data is not None:
|
|
|
test_data_original, bins = f_get_model_score_bin(test_data_original, card, score_bins)
|
|
|
test_data_gain = f_calcu_model_ks(test_data_original, y_column, sort_ascending=True)
|
|
|
test_data_gain_path = self._train_config.f_get_save_path(f"test_data_gain.png")
|
|
|
f_df_to_image(test_data_gain, test_data_gain_path)
|
|
|
- metric_value_dict["测试集分数分箱"] = MetricFucEntity(image_path=test_data_gain_path)
|
|
|
+ metric_value_dict["测试集分数分箱"] = MetricFucEntity(table=test_data_gain, image_path=test_data_gain_path)
|
|
|
|
|
|
# 模型分psi
|
|
|
model_psi = f_calcu_model_psi(train_data_original, test_data_original)
|
|
|
model_psi_path = self._train_config.f_get_save_path(f"model_psi.png")
|
|
|
f_df_to_image(model_psi, model_psi_path)
|
|
|
- metric_value_dict["模型稳定性"] = MetricFucEntity(value=model_psi["psi"].sum().round(4), image_path=model_psi_path)
|
|
|
+ metric_value_dict["模型稳定性"] = MetricFucEntity(table=model_psi, value=model_psi["psi"].sum().round(4),
|
|
|
+ image_path=model_psi_path)
|
|
|
+
|
|
|
+ if jupyter:
|
|
|
+ from IPython import display
|
|
|
+ print("-----模型结果-----")
|
|
|
+ display.display(metric_value_dict["模型结果"].table)
|
|
|
+ f_display_images_by_side(metric_value_dict["模型结果"].image_path, display)
|
|
|
+ # 模型psi
|
|
|
+ display.display(metric_value_dict["模型稳定性"].table)
|
|
|
+ print(f"模型psi: {metric_value_dict['模型稳定性'].value}")
|
|
|
+ display.display(metric_value_dict["变量系数"].table)
|
|
|
+ print("-----训练集-分数分箱-----")
|
|
|
+ display.display(metric_value_dict["训练集分数分箱"].table)
|
|
|
+ print("-----测试集-分数分箱-----")
|
|
|
+ display.display(metric_value_dict["测试集分数分箱"].table)
|
|
|
+ # 评分卡
|
|
|
+ display.display(metric_value_dict["评分卡"].table)
|
|
|
|
|
|
return metric_value_dict
|
|
|
|