**

通过TalkingData用户行为数据预测性别(基于决策树算法)

**

要求如下

一、案例数据:
TalkingData是中国最大的独立第三方移动数据服务平台,平均月活跃用户为6.5亿,为超过12万款移动应用,以及10万应用开发者提供服务。案例数据集来自TalkingData,已进行脱敏处理。目标是通过用户的移动应用使用情况、位置信息和移动设备信息,预测用户性别。精确预测用户性别有助于开发者和广告商推送用户感兴趣的内容。
案例共包含6个数据集:
• 数据集gender_age:每个用户对应一个设备号(变量device_id),需要预测用户性别(变量gender);
• 数据集events和app_events:用户数据上传事件时的经纬度和时间戳,以及事件对应的应用(变量app_id)列表;
• 数据集app_labels和label_categories:应用对应的分类标签(变量label_id)和分类描述(变量category);
• 数据集phone_brand_device_model:用户使用的手机品牌(变量phone_brand)和型号(变量device_model)。
每个数据集包含的变量和相互之间的连接关系如下图所示。

二、数据预处理和特征工程
目标:连接相关数据,并找出与预测用户性别相关联的属性

三、模型训练
使用最优的超参数组合在训练集上做模型训练,并画出最终的决策树。

四、模型评估
在测试集上做模型测试,评估模型性能(accuracy, F1, AUC)。

**

解决方式如下

**
一、导入数据
使用pandas库中的pd.read_csv(“文件存放路径”)
按照要求合并表,可以使用pandas库中的merge方法:pd.merge(table1,table2)将表格合并。
(由于此处没有对表格的链接方式作要求,故仅使用pd.merge(table1,table2)即可)

Tips:对于导入数据内存不够报错的同学可以考虑

pd.merge使用方法详见https://blog.csdn.net/brucewong0516/article/details/82707492

二、数据探索和可视化:
数据类型
使用dataframe.info()获取数据描述,


如上图所示,由于数据值过大,占用内存多达9.4G,因此需要对数据进行处理,将部分数值较小的数据的类型从int 64/float 64 转至 int 8/float 16。

三、数据清洗和补全
(1)由dataframe.info()可以看出此数据集中是否有空值。
(2)由于决策树模型对于数据中包含的类别较为敏感,当数据类别极多时,考虑去除该列以简化模型,因此计算各列数据的总类别数,以此判断是否将该列列入决策树模型的考虑当中。
由于数据中有标称型属性,计算该属性的类别,可以使用pd.dataframe.unique()方法返回数据中所有不重复的项,并用tolist()将其转换成列表,计算该列表的长度即得该列数据类别总数。
即len(dataframe[列名].unique().tolist())
去除类别过多的列数据,使用dataframe.drop(columns = 列名或存放列名的列表,axis = 1)

Tips: axis = 1删除该列,axis = 0删除该行,默认axis = 0
详情参考https://blog.csdn.net/songyunli1111/article/details/79306639

四、数据预处理:
由于数据中有标称型属性,因此需要对数据进行处理。
pd.dataframe.unique()方法返回数据中所有不重复的项,并用tolist()将其转换成列表。index() 函数用于从列表中找出某个值第一个匹配项的索引位置。如此即可将标称型数据转和数值0,1,2,3…一一对应。

lables = dataframe[列名].unique().tolist()
dataframe[列名]= dataframe[列名].apply(lambda n: lables.index(n))

五、建模
关于k折交叉验算:
参考 https://blog.csdn.net/qq_32618817/article/details/80610383
关于决策树算法:https://blog.csdn.net/YZXnuaa/article/details/89598044

六、参考代码:
Jupyter notebook代码

#%%
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn
from sklearn.tree import tree, DecisionTreeClassifier
from sklearn.model_selection import StratifiedKFold
import graphviz
from sklearn import metrics
from sklearn.metrics import auc#%%# 导入csv文件app_events_data = pd.read_csv("F:/txy/demo/app_events.csv")
app_labels_data = pd.read_csv("F:/txy/demo/app_labels.csv")
events_data = pd.read_csv("F:/txy/demo/events.csv")
gender_age_data = pd.read_csv("F:/txy/demo/gender_age.csv")
label_categories_data = pd.read_csv("F:/txy/demo/label_categories.csv")
phone_brand_device_model_data = pd.read_csv("F:/txy/demo/phone_brand_device_model.csv")
print("Data have been imported!")#%%tabel_list = [phone_brand_device_model_data,gender_age_data,events_data,app_events_data,app_labels_data,label_categories_data]
tabel_list_name = ['phone_brand_device_model_data','gender_age_data','events_data','app_events_data','app_labels_data','label_categories_data']customer_data = tabel_list[0]
for tabel_list_index in range(1,len(tabel_list)):customer_data = pd.merge(customer_data,tabel_list[tabel_list_index])
# 释放内存
for list in tabel_list:del list
print("Data have been merged.")#%%customer_data.info()#%%# 处理gender,phone_brand,device_model,category字符型数据
reform_data_list = ['gender','phone_brand','device_model','category','group']
for reform_data in reform_data_list:lables = customer_data[reform_data].unique().tolist()print("Labels of "+reform_data +" is {}".format(len(lables)))
#%%
reform_data_int8_list = ['gender','phone_brand','group']
for reform_data in reform_data_int8_list:lables = customer_data[reform_data].unique().tolist()customer_data[reform_data] = customer_data[reform_data].apply(lambda n: lables.index(n)).astype(pd.np.int8)
reform_data_int16_list = ['device_model','category']
for reform_data in reform_data_int16_list:lables = customer_data[reform_data].unique().tolist()customer_data[reform_data] = customer_data[reform_data].apply(lambda n: lables.index(n)).astype(pd.np.int16)
#%%
customer_data.info()
#%%
small_data_list = ['age','is_installed','is_active']
for small_data in small_data_list:customer_data[small_data] = customer_data[small_data].astype(pd.np.int8)#%%
customer_data.info()
#%%giant_data_list = ['device_id','longitude','latitude','app_id','label_id']
for giant_data in giant_data_list:lables = customer_data[giant_data].unique().tolist()print("Labels of "+giant_data +" is {}".format(len(lables)))
#%%
lables = customer_data['label_id'].unique().tolist()
customer_data['label_id'] = customer_data['label_id'].apply(lambda n: lables.index(n)).astype(pd.np.int16)#%%
data_to_be_dropped = ['device_id','longitude','latitude','app_id','timestamp','event_id']
for data in data_to_be_dropped:customer_data = customer_data.drop(labels = data, axis=1)
customer_data.info()
#%%
feature = customer_data.drop('gender',1).columns[:]
class_name = np.unique(gender_age_data['gender'])
X = customer_data.drop('gender',1).values
y = customer_data[['gender']].values
dtc = DecisionTreeClassifier(max_depth=3,min_samples_leaf=1)
skf=StratifiedKFold(n_splits=3)
overall_accuracy = 0
overall_AUC = 0
count = 1
for train_index,test_index in skf.split(X,y):X_train,X_test=X[train_index],X[test_index]y_train,y_test=y[train_index],y[test_index]dtc = dtc.fit(X_train,y_train)prediction = dtc.predict(X_test)accuracy = dtc.score(X_test,y_test)print("The accuracy of the testset "+str(count)+" is: "+str(accuracy))fpr, tpr, thresholds = metrics.roc_curve(y_true = y_test, y_score= prediction,  pos_label=1)plt.plot(fpr,tpr,marker = 'o')plt.show()AUC = auc(fpr, tpr)print("The AUC of this prediction is "+str(AUC))dot_data = sklearn.tree.export_graphviz(dtc, out_file=None,feature_names=feature,class_names=class_name)graph = graphviz.Source(dot_data) graph.render("tree" + str(count))overall_accuracy += accuracyoverall_AUC += AUCcount += 1
print("The overall accuracy is: "+str(overall_accuracy/3))
print("The overall AUC is: "+str(overall_AUC/3))

Tips: 关于graphviz包,除了下载python中的graphviz以外还需要在windows上安装graphviz软件包,百度搜索windows graphviz安装即可

kaggle TalkingData用户性别数据预测性别入门笔记相关推荐

  1. 基于贝叶斯定理的根据大学生恋爱心理数据预测性别的朴素贝叶斯模型(python+mysql)

    "人工智能源于数据科学,大数据成就了人工智能"-----郭毅可 数据对人工智能来说尤为关键,我国人工智能发展如此之迅速,其中就因为我国的人口基数大.但当某些数据缺失时,怎么解决呢? ...

  2. Python数据分析入门笔记9——数据预处理案例综合练习(男篮女篮运动员)

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  3. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  4. 【读书笔记】推荐系统实践·第四章·利用用户标签数据

    代码方面,主要实现了4.3和4.2.2的一个验证统计,4.4的代码本来准备写一下的,后来因为杂碎的统计工作太多就放弃了.代码和笔记的word版放在https://github.com/littleli ...

  5. 《推荐系统实践》 第四章 利用用户标签数据 读书笔记

    推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章(文章名是"Tagsplanations : Explaining Recommendation ...

  6. Python数据分析入门笔记10——简单案例练习(学生信息分析)

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  7. 基于第二届易观算法大赛——性别年龄预测中数据的分析(娱乐向)

    最近参见了第二届易观算法大赛--性别年龄预测比赛,基于不懈的努力还是名落孙山,成绩虽然算不得满意,不过比赛过程中收获还是挺多的.目前比赛还没结束,有兴趣的可以参加一下. 本次主要是对比赛中的训练数据进 ...

  8. NO.90——京东用户购买意向预测之数据预处理

    文章目录 1 目标 2 数据集 3 数据挖掘流程 4 数据清洗 4.1 数据集验证 4.2 检查是否有重复记录 4.3 检查是否存在注册时间在2016年-4月-15号之后的用户 4.4 行为数据中的u ...

  9. 天猫用户重复购买预测——数据探索

    天猫用户重复购买预测--数据探索 1. 理论 1.1 缺失数据处理 1.2 不均衡样本 1.2.1 随机欠采样 1.2.2 随机过采样 1.2.3 基于聚类的过采样方法 1.2.4 SMOTE算法 1 ...

  10. 天猫用户重复购买预测赛题——赛题理解 + 数据探索

    天猫用户重复购买预测赛题--赛题理解 + 数据探索 理论知识 1. 赛题信息 2. 评估指标 AUC 3. 查看数据样例 4. 缺失值查看 5. 查看数据分布 6. 探究影响复购的各种因素 理论知识 ...

最新文章

  1. 58 Openstack基础、openstack之glance、openstack之keystone
  2. android kotlin面试题,Kotlin面试25题
  3. 从SQL Server到多数据库,微软数据库迁移全攻略
  4. python重构函数_Python代码重构
  5. caffe安装_目标检测之caffe-ssd模型训练与测试
  6. halcon 将数据保存到excel_pandas筛选、合并、批量保存excel数据
  7. eclipse mysql jndi_裴东辉-MyEclipse和Eclipse中使用JNDI来配置程序的开发,以及服务器的配置 - 裴东辉...
  8. python软件源码下载_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...
  9. quartz 配置 数据源
  10. 警察抓小偷打字游戏JAVA_警察抓小偷打字游戏金山打字通游戏
  11. 计算机网络-聊天室的设计与实现
  12. Python学习笔记(15)-Python常用模块总结
  13. Excel - VLOOKUP 函数的精确查找和近似查找
  14. 二维码制作方法有哪些?教你简单的二维码制作方法
  15. 不蒜子实现网站访问量访客数统计
  16. Visual Studio 2022如何安装和使用MSDN
  17. Greenplum—2、操作汇总
  18. Unity实现游戏中坦克运动控制(一)
  19. foxmail 发不出邮件,被电脑管家云查杀引擎检测出带有病毒:Win32.Trojan.Agent.hryf
  20. dnf韩服服务器维护中,dnf韩服正式服8月20日更新汇总 修复各职业技能BUG

热门文章

  1. LDO:低压差线性稳压芯片
  2. Python爬虫之爬取豆瓣图书TOP250
  3. 双歧杆菌基因组序列批量下载、基因组注释、antiSMASH合成基因簇挖掘、核心基因的同源性比较。
  4. python数据分析入门之高效的学习路径
  5. B站视频封面图片获取_CodingPark编程公园
  6. 两台计算机直连怎么写ip,两台电脑直连(两台电脑用一条网线连接)
  7. 加上华为mate30系列,9月还有5场新机发布会,你更期待哪场
  8. 人睡眠时做恶梦以及梦魇或鬼压身的原因
  9. 弘玑Cyclone上榜36氪中国超自动化先锋企业
  10. Windows 10 家庭版在忘记旧密码的情况下,如何重置密码