ai夏令营·运行Baseline

142 阅读4分钟

解题思路

参赛选手的任务是基于训练集的样本数据,构建一个模型来预测测试集中用户的新增情况。这是一个二分类任务,其中目标是根据用户的行为、属性以及访问时间等特征,预测该用户是否属于新增用户。具体来说,选手需要利用给定的数据集进行特征工程、模型选择和训练,然后使用训练好的模型对测试集中的用户进行预测,并生成相应的预测结果。

思考:这里为什么选择机器学习算法?为什么不考虑深度学习? 在许多机器学习问题中,特征工程的重要性不容忽视。如果特征工程能够充分捕捉数据的关键特征,那么机器学习算法也能够表现很好。深度学习在某种程度上可以自动学习特征,但对于特定问题,手动设计特征可能会更有效。

思考:这里从逻辑回归和决策树中选择,哪一个模型更加合适?

  • 决策树能够处理非线性关系,并且可以自动捕获特征之间的交互作用。
  • 它可以生成可解释的规则,有助于理解模型如何做出决策。
  • 决策树能够处理不同类型的特征,包括分类和数值型。

实践步骤

1. 导入库:首先,代码导入了需要用到的库,包括 pandas(用于数据处理和分析)和 DecisionTreeClassifier(决策树分类器)等。

2. 读取数据:代码通过使用 pd.read_csv 函数从文件中读取训练集和测试集数据,并将其存储在 train_data 和 test_data 两个数据框中。

3. 特征工程:

  • udmap_onethot 函数将原始的 udmap 特征进行了预处理,将其转换为一个长度为9的向量,表示每个key是否存在。
  • 对 udmap 特征进行编码,生成 udmap_isunknown 特征,表示该特征是否为空。
  • 将处理后的 udmap 特征与原始数据拼接起来,形成新的数据框。
  • 提取 eid 特征的频次(出现次数)和均值,并添加为新的特征。
  • 使用时间戳 common_ts 提取小时部分,生成 common_ts_hour 特征。

4. 决策树模型训练和预测:

  • 创建了一个 DecisionTreeClassifier 的实例,即决策树分类器。
  • 使用 fit 函数对训练集中的特征和目标进行拟合,训练了决策树模型。
  • 对测试集使用已训练的模型进行预测,得到预测结果。
  • 将预测结果和相应的 uuid 组成一个DataFrame,并将其保存到 submit.csv 文件中。

代码实现了一个简单的特征工程和模型训练的过程。根据任务的具体要求和数据的特点,可能需要进一步优化特征工程的步骤、选择合适的模型、调参以及进行模型评估等工作。

实操并回答下面问题:

- 如果将submit.csv提交到讯飞比赛页面,会有多少的分数?

初步显示为0.62671

- 代码中如何对udmp进行了人工的onehot?

def udmap_onethot(d):
    v = np.zeros(9)  # 创建一个长度为 9 的零数组
    if d == 'unknown':  # 如果 'udmap' 的值是 'unknown'
        return v  # 返回零数组
    d = eval(d)  # 将 'udmap' 的值解析为一个字典
    for i in range(1, 10):  # 遍历 'key1''key9', 注意, 这里不包括10本身
        if 'key' + str(i) in d:  # 如果当前键存在于字典中
            v[i-1] = d['key' + str(i)]  # 将字典中的值存储在对应的索引位置上
            
    return v  # 返回 One-Hot 编码后的数组

这个函数的目标是将 udmap 列的内容进行 One-Hot 编码,将字典中的各个键值对对应到一个长度为 9 的数组中。具体步骤如下:

  1. 创建一个长度为 9 的零数组 v,用于存储 One-Hot 编码后的结果。
  2. 如果 udmap 列的值为 'unknown',说明该样本的 udmap 是未知的,此时直接返回零数组。
  3. 如果不是 'unknown',则使用 eval() 函数将字符串解析为字典对象,例如 {'key1': 3, 'key2': 2}
  4. 循环遍历从 key1key9 的键,如果某个键存在于字典中,就将对应的值存储在 v 数组的对应索引位置上。例如,如果字典中有 'key3': 5,那么就将值 5 存储在 v 的第三个索引位置(索引为 2)上。
  5. 最后返回存储 One-Hot 编码后的数组 v

在数据预处理阶段,通过对每个样本的 udmap 列应用这个自定义函数,就可以将其转换为对应的 One-Hot 编码表示,然后将编码后的特征与原始数据拼接在一起,从而完成 udmap 列的编码工作。