baseline请见学习手册AI夏令营第三期 - 用户新增预测挑战赛教程 - 飞书云文档 (feishu.cn)
2.1数据分析与可视化
热力图展现的是特征与标签之间的相关性,颜色越深的越相关
问题:
- 字段x1至x8为用户相关的属性,为匿名处理字段。
- 添加代码对这些数据字段的取值分析,那些字段为数值类型?那些字段为类别类型?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
train_data = pd.read_csv('用户新增预测挑战赛公开数据/train.csv')
test_data = pd.read_csv('用户新增预测挑战赛公开数据/test.csv')
# 打印字段的数据类型
for col in train_data.columns:
print(f"字段 {col} 的数据类型为 {train_data[col].dtype}")
运行结果为:
字段 uuid 的数据类型为 int64
字段 eid 的数据类型为 int64
字段 udmap 的数据类型为 object
字段 common_ts 的数据类型为 int64
字段 x1 的数据类型为 int64
字段 x2 的数据类型为 int64
字段 x3 的数据类型为 int64
字段 x4 的数据类型为 int64
字段 x5 的数据类型为 int64
字段 x6 的数据类型为 int64
字段 x7 的数据类型为 int64
字段 x8 的数据类型为 int64
字段 target 的数据类型为 int64
- 对于数值类型的字段,考虑绘制在标签分组下的箱线图。
- 从common_ts中提取小时,绘制每小时下标签分布的变化。
- 对udmap进行onehot,统计每个key对应的标签均值,绘制直方图。
# 确定数值类型和类别类型字段
numerical_cols = ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x8'] # 假设x7为类别特征
categorical_cols = ['x7']
# 绘制数值类型字段在标签分组下的箱线图
for col in numerical_cols:
plt.figure(figsize=(8, 6))
sns.boxplot(x='target', y=col, data=train_data)
plt.title(f"标签分组下 {col} 的箱线图")
plt.show()
# 从common_ts中提取小时,绘制每小时下标签分布的变化
train_data['common_ts'] = pd.to_datetime(train_data['common_ts'])
train_data['hour'] = train_data['common_ts'].dt.hour
hourly_counts = train_data.groupby('hour')['target'].mean()
plt.figure(figsize=(10, 6))
hourly_counts.plot(kind='bar')
plt.xlabel('小时')
plt.ylabel('标签均值')
plt.title('每小时下标签分布的变化')
plt.xticks(rotation=0)
plt.show()
# 对udmap进行onehot编码,统计每个key对应的标签均值,绘制直方图
udmap_encoded = pd.get_dummies(train_data['udmap'])
udmap_encoded['target'] = train_data['target']
udmap_mean = udmap_encoded.mean()
plt.figure(figsize=(12, 6))
udmap_mean.plot(kind='bar')
plt.xlabel('udmap Key')
plt.ylabel('标签均值')
plt.title('每个udmap Key对应的标签均值')
plt.xticks(rotation=90)
plt.show()
2.2交叉验证
问题:
- 在上面模型中哪一个模型的macro F1效果最好,为什么这个模型效果最好?
SGD 模型的 macro F1: 0.5214560980491942
Naive Bayes 模型的 macro F1: 0.5434796486770832
Random Forest 模型的 macro F1: 0.7042966859724639
效果最好的模型是:Random Forest,其 macro F1 为:0.7042966859724639
SGD 模型的平均精度: 0.7825458285242667
Naive Bayes 模型的平均精度: 0.7612499919401118
Random Forest 模型的平均精度: 0.8819065181927797
这可能是因为随机森林在组合多个决策树的预测时能够有效地减少过拟合,同时又能保持较好的泛化能力,从而在这个任务中表现优秀。随机森林还能够处理特征之间的复杂关系,对于高维、复杂的数据集通常有良好的性能。
- 使用树模型训练,然后对特征重要性进行可视化;
- 再加入3个模型训练,对比模型精度;
2.3特征工程
编写代码回答下面的问题:
- 加入特征之后模型的精度有什么变化?
- 思考并加入3个额外的特征,并观测模型精度的变化
precision recall f1-score support
0 0.868 0.920 0.894 533155
1 0.232 0.148 0.181 87201
accuracy 0.812 620356
macro avg 0.550 0.534 0.537 620356
weighted avg 0.779 0.812 0.793 620356
precision recall f1-score support
0 0.934 0.940 0.937 533155
1 0.618 0.593 0.605 87201
accuracy 0.891 620356
macro avg 0.776 0.766 0.771 620356
weighted avg 0.889 0.891 0.890 620356
precision recall f1-score support
0 0.893 0.736 0.807 533155
1 0.221 0.458 0.298 87201
accuracy 0.697 620356
macro avg 0.557 0.597 0.552 620356
weighted avg 0.798 0.697 0.735 620356
precision recall f1-score support
0 0.921 0.955 0.938 533155
1 0.644 0.499 0.562 87201
accuracy 0.891 620356
macro avg 0.782 0.727 0.750 620356
weighted avg 0.882 0.891 0.885 620356
precision recall f1-score support
0 0.867 0.767 0.814 533155
1 0.164 0.280 0.207 87201
accuracy 0.699 620356
macro avg 0.516 0.524 0.511 620356
weighted avg 0.768 0.699 0.729 620356
precision recall f1-score support
0 0.955 0.951 0.953 533155
1 0.709 0.726 0.717 87201
accuracy 0.920 620356
macro avg 0.832 0.838 0.835 620356
weighted avg 0.920 0.920 0.920 620356
precision recall f1-score support
0 0.915 0.499 0.646 533155
1 0.190 0.718 0.300 87201
accuracy 0.530 620356
macro avg 0.553 0.608 0.473 620356
weighted avg 0.813 0.530 0.597 620356
precision recall f1-score support
0 0.938 0.964 0.951 533155
1 0.737 0.608 0.666 87201
accuracy 0.914 620356
macro avg 0.837 0.786 0.808 620356
weighted avg 0.909 0.914 0.911 620356