当前位置: 首页 > news >正文

DataWhale 机器学习夏令营第三期

DataWhale 机器学习夏令营第二期

  • 学习记录一 (2023.08.18)
    • 1.赛题理解
    • 2.缺失值分析
    • 3. 简单特征提取
    • 4. 数据可视化
      • 离散变量
      • 离散变量分布分析

DataWhale 机器学习夏令营第三期
——用户新增预测挑战赛


学习记录一 (2023.08.18)

已跑通baseline,换为lightgbm基线,不加任何特征线上得分0.52214
添加baseline特征,线上得分0.78176
暴力衍生特征并微调模型参数,线上得分0.86068

1.赛题理解

赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。

  • 其中uuid为样本唯一标识,
  • eid为访问行为ID,
  • udmap为行为属性,其中的key1到key9表示不同的行为属性,如项目名、项目id等相关字段,
  • common_ts为应用访问记录发生时间(毫秒时间戳),
  • 其余字段x1至x8为用户相关的属性,为匿名处理字段。
  • target字段为预测目标,即是否为新增用户。

2.缺失值分析

print('-----Missing Values-----')
print(train_data.isnull().sum())print('\n')
print('-----Classes-------')
display(pd.merge(train_data.target.value_counts().rename('count'),train_data.target.value_counts(True).rename('%').mul(100),left_index=True,right_index=True
))

分析:数据无缺失值, 533155(85.943394%)负样本, 87201(14.056606%)正样本

数据分布不均的处理:

  • 阈值迁移
  • 设置样本权重
weight_0 = 1.0  # 多数类样本的权重
weight_1 = 8.0  # 少数类样本的权重
dtrain = lgb.Dataset(X_train, label=y_train, weight=y_train.map({0: weight_0, 1: weight_1}))
dval = lgb.Dataset(X_val, label=y_val, weight=y_val.map({0: weight_0, 1: weight_1}))

3. 简单特征提取

行为相关特征:eid和udmap相关特征提取

  • udmap中value特征提取:baseline中已经给出
  • udmap中key特征提取
import jsondef extract_keys_as_string(row):if row == 'unknown':return Noneelse:parsed_data = json.loads(row)keys = list(parsed_data.keys())keys_string = '_'.join(keys)  # 用下划线连接 keyreturn keys_stringtrain_df['udmap_key'] = train_df['udmap'].apply(extract_keys_as_string)
train_df['udmap_key'].value_counts()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkbowYDJ-1692365546794)(C:\Users\ZYM\AppData\Roaming\Typora\typora-user-images\image-20230818195454065.png)]

观察eid和udmap_key 对应关系

train_df.groupby('eid')['udmap_key'].unique()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zqnrzDe-1692365546795)(C:\Users\ZYM\AppData\Roaming\Typora\typora-user-images\image-20230818195553955.png)]

分析:可以看到eid和key是强相关甚至是一一对应的,后续可以围绕着eid、key、value构造行为相关特征。

4. 数据可视化

离散变量

查看各个特征情况:

for i in train_data.columns:if train_data[i].nunique() < 10:print(f'{i}, {train_data[i].nunique()}: {train_data[i].unique()}')else:print(f'{i}, {train_data[i].nunique()}: {train_data[i].unique()[:10]}')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPwmt4rl-1692365546795)(C:\Users\ZYM\AppData\Roaming\Typora\typora-user-images\image-20230818200557544.png)]
分析:

  • [‘eid’, ‘x3’, ‘x4’, ‘x5’] 为取值较多的类别特征想

  • [‘x1’, ‘x2’, ‘x6’,'x7, ‘x8’]为取值较少的类别特征, x8 基本确定为性别特征

离散变量分布分析

研究离散变量['eid', 'x3', 'x4', 'x5‘,'x1', 'x2', 'x6','x7', 'x8'']的分布,蓝色是训练集,黄色是验证集,分布基本一致
粉色的点是训练集下每个类别每种取值的target的均值,也就是target=1的占比

绘制代码:

def plot_cate_large(col):data_to_plot = (all_df.groupby('set')[col].value_counts(True)*100)fig, ax = plt.subplots(figsize=(10, 6))sns.barplot(data=data_to_plot.rename('Percent').reset_index(),hue='set', x=col, y='Percent', ax=ax,orient='v',hue_order=['train', 'test'])x_ticklabels = [x.get_text() for x in ax.get_xticklabels()]# Secondary axis to show mean of targetax2 = ax.twinx()scatter_data = all_df.groupby(col)['target'].mean()scatter_data.index = scatter_data.index.astype(str)ax2.plot(x_ticklabels,scatter_data.loc[x_ticklabels],linestyle='', marker='.', color=colors[4],markersize=15)ax2.set_ylim([0, 1])# Set x-axis tick labels every 5th valuex_ticks_indices = range(0, len(x_ticklabels), 5)ax.set_xticks(x_ticks_indices)ax.set_xticklabels(x_ticklabels[::5], rotation=45, ha='right')# titlesax.set_title(f'{col}')ax.set_ylabel('Percent')ax.set_xlabel(col)# remove axes to show only one at the endhandles = []labels = []if ax.get_legend() is not None:handles += ax.get_legend().legendHandleslabels += [x.get_text() for x in ax.get_legend().get_texts()]else:handles += ax.get_legend_handles_labels()[0]labels += ax.get_legend_handles_labels()[1]ax.legend().remove()plt.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.08), fontsize=12)plt.tight_layout()plt.show()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下一步,分析数据,构建特征。

http://www.lryc.cn/news/134947.html

相关文章:

  • 回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)
  • python分析实战(4)--获取某音热榜
  • Java根据List集合中的一个字段对集合进行去重
  • (AtCoder Beginner Contest 315)
  • API 接口选择那个?RESTful、GraphQL、gRPC、WebSocket、Webhook
  • 「Python|音视频处理|环境准备」如何在Windows系统下安装并配置音视频处理工具FFmpeg
  • 软考高级架构师下篇-12层次式架构设计理论与实践
  • 234. 回文链表
  • LInux之例行工作
  • C++,从“hello world“开始
  • /root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘+ssh-rsa‘.
  • mac m1上系统内录内部声音的方法/无需安装Blackhole
  • 数字人学习目录
  • PHP 房产网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目
  • 0基础入门代码审计-2 Fortify初探
  • qiiuzhiji4
  • 构建 NodeJS 影院微服务并使用 docker 部署【01/4】
  • 变频器和plc之间无线MODBUS通讯
  • 【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25
  • Redis中常见的缓存穿透、缓存击穿、缓存雪崩、缓存预热解决方案
  • 第二章-自动驾驶卡车-自动驾驶卡车前装量产的要求
  • Midjourney API 申请及使用
  • mysql mysql 容器 忽略大小写配置
  • 第58步 深度学习图像识别:Transformer可视化(Pytorch)
  • angular实现全局组件
  • Spring编程模型(范式)
  • Golang GORM 单表删除
  • Windows 下 MySQL 源码学习环境搭建步骤【建议收藏】
  • redis总复习
  • [LeetCode - Python]844. 比较;含退格的字符串(Easy);415. 字符串相加(Easy)