|
@@ -10,6 +10,7 @@ import pandas as pd
|
|
import scorecardpy as sc
|
|
import scorecardpy as sc
|
|
from sklearn.linear_model import LogisticRegression
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
|
|
|
|
|
+from commom import f_df_to_image
|
|
from entitys import TrainConfigEntity, DataPreparedEntity, MetricFucEntity, DataSplitEntity
|
|
from entitys import TrainConfigEntity, DataPreparedEntity, MetricFucEntity, DataSplitEntity
|
|
from feature import f_calcu_model_ks, f_get_model_score_bin, f_calcu_model_psi
|
|
from feature import f_calcu_model_ks, f_get_model_score_bin, f_calcu_model_psi
|
|
from init import f_get_save_path
|
|
from init import f_get_save_path
|
|
@@ -44,7 +45,9 @@ class ModelLr(ModelBase):
|
|
card_df = pd.DataFrame(columns=card['basepoints'].keys())
|
|
card_df = pd.DataFrame(columns=card['basepoints'].keys())
|
|
for k, v in card.items():
|
|
for k, v in card.items():
|
|
card_df = pd.concat((card_df, v))
|
|
card_df = pd.concat((card_df, v))
|
|
- metric_value_dict["评分卡"] = MetricFucEntity(table=card_df, table_font_size=10)
|
|
|
|
|
|
+ card_df_path = 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)
|
|
|
|
|
|
# 模型系数
|
|
# 模型系数
|
|
coef = dict(zip(train_data.x_columns, self.lr.coef_.reshape(-1)))
|
|
coef = dict(zip(train_data.x_columns, self.lr.coef_.reshape(-1)))
|
|
@@ -86,17 +89,22 @@ class ModelLr(ModelBase):
|
|
# 评分卡分箱
|
|
# 评分卡分箱
|
|
train_data_original, score_bins = f_get_model_score_bin(train_data_original, card)
|
|
train_data_original, score_bins = f_get_model_score_bin(train_data_original, card)
|
|
train_data_gain = f_calcu_model_ks(train_data_original, y_column, sort_ascending=True)
|
|
train_data_gain = f_calcu_model_ks(train_data_original, y_column, sort_ascending=True)
|
|
- metric_value_dict["训练集分数分箱"] = MetricFucEntity(table=train_data_gain, table_font_size=9)
|
|
|
|
|
|
+ train_data_gain_path = 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)
|
|
if test_data is not None:
|
|
if test_data is not None:
|
|
test_data_original, bins = f_get_model_score_bin(test_data_original, card, score_bins)
|
|
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 = f_calcu_model_ks(test_data_original, y_column, sort_ascending=True)
|
|
- metric_value_dict["测试集分数分箱"] = MetricFucEntity(table=test_data_gain,
|
|
|
|
- table_font_size=9)
|
|
|
|
|
|
+ test_data_gain_path = 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)
|
|
|
|
|
|
# 模型分psi
|
|
# 模型分psi
|
|
model_psi = f_calcu_model_psi(train_data_original, test_data_original)
|
|
model_psi = f_calcu_model_psi(train_data_original, test_data_original)
|
|
- metric_value_dict["模型稳定性"] = MetricFucEntity(value=model_psi["psi"].sum().round(4), table=model_psi,
|
|
|
|
- table_font_size=10)
|
|
|
|
|
|
+ model_psi_path = 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)
|
|
|
|
+
|
|
return metric_value_dict
|
|
return metric_value_dict
|
|
|
|
|
|
def predict_prob(self, x: pd.DataFrame, *args, **kwargs):
|
|
def predict_prob(self, x: pd.DataFrame, *args, **kwargs):
|