|
@@ -4,26 +4,34 @@
|
|
@time: 2024/11/1
|
|
@time: 2024/11/1
|
|
@desc:
|
|
@desc:
|
|
"""
|
|
"""
|
|
|
|
+
|
|
import pandas as pd
|
|
import pandas as pd
|
|
from sklearn.linear_model import LogisticRegression
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
|
+from toad.metrics import KS, AUC
|
|
|
|
|
|
-from entitys import DataFeatureEntity, MetricTrainEntity, TrainConfigEntity
|
|
|
|
|
|
+from entitys import MetricTrainEntity, TrainConfigEntity, DataPreparedEntity
|
|
from .model_base import ModelBase
|
|
from .model_base import ModelBase
|
|
|
|
|
|
-from toad.metrics import KS, AUC
|
|
|
|
-
|
|
|
|
|
|
|
|
class ModelLr(ModelBase):
|
|
class ModelLr(ModelBase):
|
|
def __init__(self, train_config: TrainConfigEntity):
|
|
def __init__(self, train_config: TrainConfigEntity):
|
|
super().__init__(train_config)
|
|
super().__init__(train_config)
|
|
self.lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1)
|
|
self.lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1)
|
|
|
|
|
|
- def train(self, data: DataFeatureEntity, *args, **kwargs) -> MetricTrainEntity:
|
|
|
|
- self.lr.fit(data.get_Xdata(), data.get_Ydata())
|
|
|
|
- pred_y = self.predict(data.get_Xdata())
|
|
|
|
- ks = KS(pred_y, data.get_Ydata())
|
|
|
|
- auc = AUC(pred_y, data.get_Ydata())
|
|
|
|
- return MetricTrainEntity(auc, ks)
|
|
|
|
|
|
+ def train(self, data: DataPreparedEntity, *args, **kwargs) -> MetricTrainEntity:
|
|
|
|
+ train_data = data.train_data
|
|
|
|
+ test_data = data.test_data
|
|
|
|
+ self.lr.fit(train_data.get_Xdata(), train_data.get_Ydata())
|
|
|
|
+
|
|
|
|
+ train_prob = self.lr.predict(train_data.get_Xdata())
|
|
|
|
+ train_auc = AUC(train_prob, train_data.get_Ydata())
|
|
|
|
+ train_ks = KS(train_prob, train_data.get_Ydata())
|
|
|
|
+
|
|
|
|
+ test_prob = self.lr.predict(test_data.get_Xdata())
|
|
|
|
+ test_auc = AUC(test_prob, test_data.get_Ydata())
|
|
|
|
+ test_ks = KS(test_prob, test_data.get_Ydata())
|
|
|
|
+
|
|
|
|
+ return MetricTrainEntity(train_auc, train_ks, test_auc, test_ks)
|
|
|
|
|
|
def predict_prob(self, x: pd.DataFrame, *args, **kwargs):
|
|
def predict_prob(self, x: pd.DataFrame, *args, **kwargs):
|
|
return self.lr.predict_proba(x)[:, 1]
|
|
return self.lr.predict_proba(x)[:, 1]
|