ai夏令营·任务二

198 阅读4分钟

baseline请见学习手册⁡​​⁡​‍​‌⁤⁣⁡⁤‌⁤​⁡​‬⁢⁡⁤⁢​‍⁢​⁤⁡‌‌​⁢⁣⁣‌‌⁣​‍⁡​‬​‌‬AI夏令营第三期 - 用户新增预测挑战赛教程 - 飞书云文档 (feishu.cn)

2.1数据分析与可视化

屏幕截图 2023-08-23 190107.png 热力图展现的是特征与标签之间的相关性,颜色越深的越相关

问题:

  • 字段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交叉验证

屏幕截图 2023-08-23 192142.png 问题:

  • 在上面模型中哪一个模型的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