"""
FLAML 自动建模初始
"""
import time
start_time = time.time()
from flaml import AutoML
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, roc_curve, auc, confusion_matrix
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
import sys
import os
sys.path.append(r'D:/python')
from utils import datatls as dtls
from utils import mdtools as mdtl
# 导入 optbinning
from optbinning import BinningProcess, OptimalBinning
from optbinning import BinningProcess
import joblib
#%% 加载数据
#%% 筛选客群
# kw_model = '高反专项第9次建模'
# sqldf = cap[cap['返利'] >= 0.1]
kw_model = '二手车lgbm模型V7 数据'
sqldf = cap
# 建立专项文件夹
basepa = r'\子模型项目\%s' % kw_model
os.makedirs(basepa, exist_ok=True)
def xieru(info):
basepatxt = basepa + '\\模型信息.txt'
with open(basepatxt, 'a', encoding='utf-8') as f:
f.write(info + '\n')
datas = dtls.get_abcddf(start, end, sqldf)
datas = datas.drop_duplicates(subset=['query_id'])
datas['起租月份'] = datas['起租日_乘'].dt.strftime('%Y%m')
cc=datas.columns
#%% 获取因子与时间划分
# xieru('不限制时间训练10000次')
# 训练集 202401-09
traindf = datas[datas['起租月份'].between('202401','202409')]
# 测试集 202410-12
testdf = datas[datas['起租月份'].between('202410','202412')]
# 验证集 202501-02
ootdf = datas[datas['起租月份'].between('202501','202502')]
cctdf = datas[datas['起租月份'].between('202503','202504')]
testood=datas[datas['起租月份'].between('202410','202502')]
cctdf.columns
data = traindf.copy()
print("✅ 正在进行数据预处理...")
dropcol = colsdf['字段含义'].tolist()
dropcol.extend(['9pd30', 'data_time', 'query_id', '返利'])
X = data.drop(columns=dropcol)
y = data['9pd30']
# 缺失值填充(众数)
X = X.fillna(X.mode().iloc[0]) # 修正:取第一行众数
# 筛选数值型变量(用于后续分箱)
cc = X.describe().T
cc2 = cc[cc['std'] != 0]
selected_features = cc2.index.tolist()
# 类别变量 Label Encoding
le = LabelEncoder()
for col in X.select_dtypes(include=['object']).columns:
X[col] = le.fit_transform(X[col])
# 保存原始特征(用于后续分箱)
X_raw = X[selected_features].copy()
# 筛选变量
print("✅ 筛选变量...")
selected_features, all_results,corr_matrix,corr_matrix_final = mdtl.filter_features_by_criteria(
df=pd.concat([X_raw,y],axis=1),
target_col='9pd30',
feature_cols=cc2.index.tolist(),
iv_threshold=0.02,
spearman_threshold=0.02,
spearman_threshold_fea=0.7,
vif_threshold=10,
max_bins=8,
min_bin_size=0.03,
xieru=xieru)
selected_features.to_csv(basepa+'\\已选特征信息.csv')
corr_matrix_final.to_csv(basepa+'\\特征之间相关系数最终变量.csv')
se_fealist=selected_features['feature'].tolist()
#%% 第一次建模:FLAML
print(" 正在进行第一次建模(FLAML)")
def custom_ks_metric(
X_val, y_val,
estimator,
labels,
X_train, y_train,
weight_val=None, weight_train=None,
config=None, groups_val=None,
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290748.htm
[原创]FLAML 自动建模测试
240 浏览
0 回复
暂无回复,快来抢沙发吧!