
1) 【一句话结论】:良率预测模型性能评估需结合拟合优度(如R²、MAE)、分类效果(如AUC)等多维度指标,处理长尾分布与类别不平衡可通过数据增强(如SMOTE)、重采样策略(过采样/欠采样)、模型正则化或集成学习(如XGBoost)等手段,平衡模型泛化性与业务目标(如低良率预测的召回率)。
2) 【原理/概念讲解】:
3) 【对比与适用场景】:
| 指标 | 定义 | 适合场景 | 注意点 |
|---|---|---|---|
| R² | 拟合优度,衡量预测与真实的相关性 | 适用于回归任务(良率连续值) | 需数据标准化,避免量纲影响 |
| MAE | 平均绝对误差,实际偏差 | 适用于业务敏感场景(如良率预测) | 对异常值不敏感,但放大偏差 |
| AUC | 分类模型区分正负能力 | 适用于二分类(良/不良) | 需阈值调整,关注召回率 |
| 方法 | 定义 | 优点 | 缺点/注意点 |
|---|---|---|---|
| 过采样(SMOTE) | 对少数类(低良率)样本合成,增加数量 | 保持数据分布,避免信息丢失 | 可能引入噪声,需结合欠采样 |
| 欠采样 | 删除多数类(高良率)样本,平衡数据 | 训练速度快,减少计算资源 | 丢失多数类信息,导致泛化性差 |
| 模型调整 | 通过正则化(L1/L2)、集成学习(XGBoost权重调整) | 不改变数据分布,提升泛化性 | 需调参,可能影响训练速度 |
4) 【示例】:
伪代码(以Python风格):
from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from xgboost import XGBRegressor
from sklearn.metrics import r2_score, mean_absolute_error, roc_auc_score
# 数据预处理:SMOTE过采样
X, y = load_data() # X为特征,y为良率(0-1,0为不良,1为良)
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X, y)
# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=42)
# 训练XGBoost模型(处理非线性关系)
model = XGBRegressor(objective='reg:squarederror', n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1] # 良率>0.5为不良的概率
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
auc = roc_auc_score((y_test > 0.5).astype(int), y_pred_proba)
print(f"R²: {r2:.4f}, MAE: {mae:.4f}, AUC: {auc:.4f}")
(注:实际中良率可能为0-1的连续值,若需二分类,可设定阈值如0.5,将良率<0.5标记为不良)
5) 【面试口播版答案】:
“在良率预测模型中,性能评估需要结合多个指标,比如决定系数R²(衡量拟合优度,值越接近1越好)、平均绝对误差MAE(实际业务中更直观,反映预测偏差)、以及如果转化为二分类(良/不良)的话,用AUC(衡量模型区分能力,值越接近1越好)。处理长尾分布和类别不平衡,通常用SMOTE过采样增加少数类(低良率)样本,或者结合模型正则化(如XGBoost的L2正则化)来平衡。比如,假设数据中不良品占比1%,良品99%,直接训练模型会导致模型预测不良品的召回率很低,通过SMOTE合成少数类样本后,模型能更好地学习低良率的特征,同时用XGBoost的权重调整(如设置scale_pos_weight)来优化类别不平衡。最终评估时,不仅要看R²和MAE,还要看不良品的预测召回率,确保模型对业务关键(低良率)的预测准确。”
6) 【追问清单】:
7) 【常见坑/雷区】: