带你看数据挖掘与机器学习-厦大EDP上课出勤预测

僤鯓⒐⒋嵵緔 提交于 2020-04-12 09:11:44

带你看数据挖掘与机器学习-厦大EDP上课出勤预测

标签: 数据挖掘 特征工程 机器学习 出勤预测

write by xmhexi 2019/3/22

内容提要

首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什么是数据挖掘、特征工程、机器学习等,文章中并不涉及详细的技术与参数。

本人刚刚起步初学,文章中均为本人的理解,有不妥之处,敬请指出。

文章中涉及的的姓名,电话等信息均做了模糊处理。

案例说明

事情的开始很简单,我的EDP课程已经上了8次课了,在班级群里,老师发了一张上课出勤表,让大家核对。 出勤表大概长这个样子的:

出勤表

看着这张出勤表,我在想我们能做些什么呢?

能不能知道下次上课,谁会来,谁不会来,或者只来半天?

正好开始学习数据分析,那就用这些数据来做一个“上课出勤预测模型”吧,通过这些数据来最终预测下一次上课的出勤情况。

预测目标:下节课所有同学的出勤情况。

数据准备

说干就干,首先要获取这些数据,把出勤表图片经过剪切、识别:

图片剪切

最终得到对应的数据:

识别结果

同学们有没来上课,跟什么会有关系呢?

寻找“有没来上课”有关系的东西,并把这些东西变成数字,就叫做“特征工程”了。

接下来就来寻找这些特征了。

特征工程

手上还有的资料就是同学录了,就从同学录入手。

同学录

脱敏处理

有些数据是比较敏感的,不适合到处传播,比如姓名,手机号,公司名称等,需要先进行一些处理,让这些数据可以使用但又不会被猜出来。

比如姓名就换成拼音的首字母,手机就保留前7位,公司名称就用序号来表示,其它的就可以删除了。

脱敏处理

班委

都说“有担当 重责任”,担任班委职务是不是跟出勤有点关系?

班委信息

班委信息按级别,小组长是1,班长是4; 责任越大应该越会来上课吧?

性别

都说男女有别,在决定去不去上课的时候,应该也是有差别的吧。

性别

性别变成数字,女=0 男=1;

距离

在哪里上班(公司地点);离学校远不远? 外地的同学来上课肯定是阻力重重啊。

这个特征可以从公司名称查到公司地址,为了省事,我就用手机查询到手机号所的省、市。

手机号查询

先导入手机归属地数据,然后查看下同学们的手机所在地的情况:

手机1

手机2

根据手机所在的省和市,把同学们离学校的距离分成了4种类型: 本地的,周边的地区的,本省的;外省的;

手机3

职务

同学在公司的职务级别会不会影响来上课? 越是领导越忙,肯定有关系呢。

看一下有哪些职位:

公司职位

职位太杂了,做下归类:

职务分布

可以看出,大多同学都是经理和总监级别。

最后归成几类数字越大,级别越高:

职位归类

结伴同行

都说“青春做伴好还乡”,同一个公司如果同时有几个伙伴一起来上课,那来上课的干劲应该高一点。

先看看各个公司派出伙伴的情况:

伙伴人数 可以看出大多公司都是1个小伙伴,最高的有10个小伙伴。

最后按照派出小伙伴的数量高低分成5个级别:

伙伴索引

星座

都说处女座的做事特别不一样,脑洞大开一下,如果找到同学的星座信息,这也可能成为影响来不来上课的因素!

星座1

找到班级同学过生日的信息:

生日

对应计算出同学属于哪个星座,变成一个数字:

星座处理

天气

天气会不会影响来上课的决定? 有可能噢。

上网找出了所有上课日期对应上课地点的天气情况。

天气

不过这个特征没有加进去,留做以后再处理吧。

合成数据

找了这么多东西,最终得到了一些数据,把每个同学每节课的出勤情况做为一条记录,得到了1104条数据。

合成数据

数据模型

上面找了这么多影响上课的因素(特征),到底哪些因素有关系,怎么样的关系呢,这个不用我们操心,建立一个数据模型就可以自动计算了。 我用了一个最简单的“决策树模型”,并进行“训练”,其实就是得到这些参数对结果的影响。

模型

训练完成后,对已知的数据进行测试验证,看下准确度有多少:

测试集

哈哈,还不错哦,准确率有80%,也就是说用这个模型去预测未来,有8成的准确率。

那就用这个模型来计算下所有同学下一次上课的出勤情况,看下谁来谁不来,这个就叫“预测”:

预测数据预测

预测完了是一堆的数据,为了好看,要处理成对应的格式:

生成预测结果

怎么看数据呢?这张图中最后面的表格:

name_py就是同学的姓名拼音首字母;

"C9-1","C9-2"分别是下次上课的两天课程;

“1.0"表示这位同学来上课;

“0.0”表示这位同学不来上课;

“0.5"表示这位同学来上半天后就走了(嘻);

完整的预测结果

为了方便同学位查一下预测结果里自己来不来,我把所有的预测结果放在下面,重申一下:结果是预测出来的,准确度有限,权当游戏一把,别当真!

name_py,C9-1,C9-2
CXF,1,1
CDL,0,0
CMS,1,1
CQL,0,0
CYF,0,0
CZY,1,1
DX,1,1
FCX,1,1
FJT,0,0
FRK,0,0
FZY,1,1
FPP,1,1
GQH,1,1
GBS,1,1
HLM,0,0
HSJ,0,0
HX,1,1
HQJ,1,1
HHD,1,1
HHS,0,0
HTY,0,0
HYL,1,1
KZT,1,1
KYP,1,1
LFL,0,0
LWJ,1,1
LXH,0,0
LBC,1,1
LJG,1,1
LLH,1,1
LPH,0,0
LSJ,1,1
LYF,1,1
LBR,1,1
LGQ,0,0
LKC,1,1
LDF,1,1
LSB,1,1
LSF,0,0
PDZ,1,1
PSZ,0,0
QWH,1,1
QXH,1,1
SGZ,0,0
SYP,1,1
WJP,1,1
WXM_188,0,0
WYJ,1,1
WZ,1,1
WQL,1,1
WXM_155,1,1
XGC,1,1
XYH,1,1
YXB,1,1
YCP,1,1
YQX,0,0
ZH,1,1
ZJQ,0,0
ZSC,1,1
ZXY,1,1
ZY,1,1
ZWJ,0,0
ZLF,0,0
ZWF,1,1
ZYQ,1,1
ZQH,0,0
ZJW,1,1
ZYN,0,0
ZLJ,1,1

特别注明:有两位同学的拼音都是WXM,所以用手机号前3位附在后面以示区别。

调整模型后重新更新了预测数据,最后更新时间:2019.4.1

结束语

当然,上面的数据中还可以分析出很多有价值的信息;还可以使用更为复杂的模型,来做出更加准确的预测。

从开始有想法到完成整个项目,花了很多时间和精力,毕竟是本人首个完成的实际案例。

在此过程中要感谢EDP老师、同学提供了这么好的素材;

感谢QQ群里为我提供帮助的小伙伴们;

还要感谢我的家人和同事,提供了让我完成的时间与环境,谢谢你们!

后记

关于案例还是有些内容想要补充一下:

模型优化

上面文章中提到,这个模型的准确度只有80%,好象不太准。 还需要对模型进行优化,有几个方向:

  • 对模型的参数进行调整,也就是常说的“调参”

  • 再挖掘数据中更多的特征点;

    本文中可以挖掘的特征点还很多,比如:

    “上课时间是在一个月的什么时间,上旬中旬还是下旬?”

    “有没有连续不来上课的记录或者是请假的记录?”

    “对于外地游学这个课程,重要程度比其它课程高。”

    “同一次课程里,第二天来上课与第一天有点不同。”

    “在公司是从事哪个部门,技术、人力还是销售?”

    “所在的公司是哪个行业,生产型还是互联网?”

  • 使用不同的模型来做训练,并做对比;

  • 扩充数据,看看其它班级还有数据加进来,让数据更丰富;

视野

“当你知道的越多,未知的也会越多。”

分析完数据后,能带给我们什么呢,除了预测结果以外,其实还可以分析训练完的模型。

模型中每个因素(特征)都有一个对应的系数,表示它对结果的影响程度,有的因素(特征)的系数比较大,属于关键因素(关键特征)。从模型里可以看到,哪个因素(特征)对结果的影响比较大。

这就为我们提供了控制结果的可能性,只要控制好这些核心因素,就能对最终的结果产生想要的影响。例如:

  • 在上面案例中,如果我们发现“离学校的距离”,“公司职位的高低”是影响“出勤率”的关键因素,那么在招生时进行优化,老师也可以对这些学生给予特别的关注。
  • 如果在“用户下单预测模型”中发现,“有没有咨询过客服”是“最终下单”这个结果的关键因素之一,那么就可以通过“主动发起”等动作来促进用户下单。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!