论坛首页 红队技术交流区 阅读主题

[原创]FLAML 自动建模测试

240 浏览 0 回复
#1 楼主 2026-06-01 21:09:19
"""
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

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号