
1) 【一句话结论】数据不平衡处理需结合360场景(如恶意样本占比、实时性、特征维度),推荐方法需通过实验验证(AUC/F1-score)和资源限制(CPU/内存)选择,例如恶意样本占比低时用SMOTE+Tomek,占比中等用随机欠采样,占比高用成本敏感学习。
2) 【原理/概念讲解】数据不平衡指正常样本(多数类)远多于恶意样本(少数类),导致模型易偏向多数类。处理方法包括:
3) 【对比与适用场景】
| 方法 | 定义 | 特性 | 使用场景(360场景假设:恶意样本占比1%-10%,特征维度高,实时性要求延迟<100ms) | 注意点 |
|---|---|---|---|---|
| 随机欠采样 | 随机删除多数类(正常样本)的样本 | 简单,计算快,但可能丢失关键特征 | 恶意样本占比中等(如5%-10%),计算资源有限 | 可能导致模型无法学习正常样本的边界,泛化能力差 |
| SMOTE(过采样) | 对多数类生成合成少数类样本(插值) | 保持数据分布,避免信息丢失,但可能过拟合 | 恶意样本占比低(如<5%),特征分布复杂 | 合成样本可能不符合真实分布,模型可能过度依赖合成样本 |
| SMOTE+Tomek(混合) | 结合SMOTE过采样与Tomek链接噪声清理 | 减少噪声,优化分布,计算成本较高 | 恶意样本占比极低(如<1%),特征边界复杂 | 计算复杂,实时场景可能不适用 |
| 成本敏感学习(假设) | 调整损失函数权重,对少数类惩罚更大 | 不改变数据分布,计算简单 | 恶意样本占比高(如>10%),实时性要求高 | 需定义成本矩阵,可能忽略特征分布 |
4) 【示例】
# 假设数据集:X为特征(如恶意API调用特征),y为标签(0正常,1恶意)
# 1. 加载数据
X, y = load_360_api_data() # 假设函数加载360恶意API调用数据
# 2. 检查不平衡情况
print("原始样本数量:", len(X))
print("正常样本数量:", np.sum(y == 0))
print("恶意样本数量:", np.sum(y == 1))
# 3. 选择方法(假设恶意占比约5%,用随机欠采样)
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(sampling_strategy='auto', random_state=42)
X_resampled, y_resampled = rus.fit_resample(X, y)
# 4. 检查平衡后情况
print("平衡后样本数量:", len(X_resampled))
print("正常样本数量:", np.sum(y_resampled == 0))
print("恶意样本数量:", np.sum(y_resampled == 1))
5) 【面试口播版答案】
“面试官您好,数据不平衡在安全威胁检测中很常见,比如恶意攻击样本远少于正常请求。常用的处理方法有三种:1. 欠采样,比如随机删除正常样本,简单但可能丢失关键特征;2. 过采样(如SMOTE),通过插值生成合成恶意样本,保持分布但可能过拟合;3. 混合方法(如SMOTE+Tomek),结合过采样和噪声清理,效果更好。在360场景下,比如检测恶意API调用,如果恶意样本占比低于1%,欠采样会丢失太多正常样本的特征,导致模型泛化差;而SMOTE可能过拟合,因为合成样本可能不符合真实分布。混合方法更优,但计算成本高。通常根据样本数量和特征复杂度选择,比如恶意样本占比低时,推荐SMOTE+Tomek,平衡效果和计算成本。”
6) 【追问清单】
7) 【常见坑/雷区】