前段时间参加了一家量化投资公司的面试,其中用了集成学习算法,发现效果很好,现在将代码公布出来,以便小白学习,大神请绕道!!!
原问题:请结合附件Excel表中的数据完成下列问题:
模型
1)以投资金额为目标变量建立一个线性模型。
2)以投资金额高低区分高投资与低投资用户,以此为目标变量建立逻辑回归模型。
3)以投资金额高低区分高投资与低投资用户,以此为目标变量建立一至两个机器学习模型(GBM, Random Forrest, Neural Network, SVM 等等)
附加了集成学习算法以此来提高模型性能
——————————————————–
可以看出问题是一个二分类的问题,本教程教你如何利用机器学习算法对用户分类-以人人贷数据为例,亮点主要是集成学习算法,废话不多说,直接上干货。
首先源数据长这样
可以看出数据清洗还挺复杂的,别慌,我们慢慢来!
#导入所用的工具包
import pandas as pd
import numpy as np
import re
data=pd.read_excel(r"./模型算法-02-Quantum One 面试数据集.xlsx")#读取数据,后面有数据链接
SEED=123#设立随机种子以便结果复现
np.random.seed(SEED)
data.info()#查看数据基本信息
运行可以得到以下结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 33 columns):
用户id 5000 non-null object
投资金额 5000 non-null float64
年龄 5000 non-null int64
性别 5000 non-null object
手机省份 4994 non-null object
手机城市 4994 non-null object
注册时间 5000 non-null object
用户注册终端 5000 non-null object
用户注册渠道 670 non-null object
会员级别 5000 non-null object
最近一次登录省份 4982 non-null object
最近一次登录城市 4982 non-null object
最近一次登录终端 4995 non-null object
最近一次登录ip 4982 non-null object
最近一次登录设备 4018 non-null object
最近一次登录时间 4995 non-null object
是否开通托管 5000 non-null object
开通托管日期 4999 non-null object
首次充值日期 4990 non-null object
首投时间 4986 non-null object
首投距今时间(天) 4986 non-null float64
最近一次投资距今时间(天) 4986 non-null float64
本月是否有大额回款 5000 non-null object
是否访问7天内注册 5000 non-null object
是否注册7天内充值 5000 non-null object
是否注册7天内投资 5000 non-null object
是否托管7天内充值 5000 non-null object
是否托管7天内投资 5000 non-null object
是否充值7天内投资 5000 non-null object
首投距注册时长(天) 4986 non-null float64
用户浏览产品期限倾向(月) 4220 non-null object
用户浏览产品利率倾向 4221 non-null object
投资等级 5000 non-null int64
dtypes: float64(4), int64(2), object(27)
memory usage: 1.3+ MB
可以看出,样本量是5000行,30个变量,大部分变量都有缺失值,有27个object对象,之后要对这些非数值变量进行量化处理才行。
data=data.drop(["最近一次登录ip","用户注册渠道"],axis=1)#考虑到用户注册渠道变量缺失值太多,直接删除,然后最近一次登录IP没有对它解析,这个也暂时删除掉。
data=data.fillna(method='pad')#填补缺失值,用的是pad平滑数据的方法,一定要记得加method=哦,要不然有时候会把pad当做字符串填进去的
data.info()#再次查看数据信息,缺失值填充完毕
<class 'pandas.