1. 程式人生 > >帶你看資料探勘與機器學習-廈大EDP上課出勤預測

帶你看資料探勘與機器學習-廈大EDP上課出勤預測

開發十年,就只剩下這套架構體系了! >>>   

帶你看資料探勘與機器學習-廈大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.0	1.0
CDL	0.0	0.0
CMS	0.0	0.0
CQL	0.0	0.0
CYF	0.0	0.0
CZY	1.0	1.0
DX	1.0	1.0
FCX	1.0	1.0
FJT	0.0	0.0
FRK	1.0	1.0
FZY	1.0	1.0
FPP	1.0	1.0
GQH	0.0	0.0
GBS	1.0	1.0
HLM	0.0	0.0
HSJ	0.0	0.0
HX	1.0	1.0
HQJ	1.0	1.0
HHD	1.0	1.0
HHS	0.0	0.0
HTY	0.0	0.0
HYL	1.0	1.0
KZT	1.0	1.0
KYP	1.0	1.0
LFL	0.0	0.0
LWJ	1.0	1.0
LXH	0.0	0.0
LBC	0.0	0.0
LJG	1.0	1.0
LLH	1.0	1.0
LPH	1.0	1.0
LSJ	1.0	1.0
LYF	1.0	1.0
LBR	1.0	1.0
LGQ	1.0	1.0
LKC	1.0	1.0
LDF	1.0	1.0
LSB	1.0	1.0
LSF	0.0	0.0
PDZ	1.0	1.0
PSZ	0.0	0.0
QWH	1.0	1.0
QXH	1.0	1.0
SGZ	0.0	0.0
SYP	1.0	1.0
WJP	1.0	1.0
WXM_188	0.5	0.5
WYJ	1.0	1.0
WZ	1.0	1.0
WQL	0.0	0.0
WXM_155	0.0	0.0
XGC	1.0	1.0
XYH	1.0	1.0
YXB	1.0	1.0
YCP	1.0	1.0
YQX	0.0	0.0
ZH	1.0	1.0
ZJQ	0.0	0.0
ZSC	1.0	1.0
ZXY	1.0	1.0
ZY	1.0	1.0
ZWJ	0.0	0.0
ZLF	0.0	0.0
ZWF	1.0	1.0
ZYQ	1.0	1.0
ZQH	0.0	0.0
ZJW	0.0	0.0
ZYN	0.0	0.0
ZLJ	1.0	1.0

特別註明:有兩位同學的拼音都是WXM,所以用手機號前3位附在後面以示區別。

結束語

當然,上面的資料中還可以分析出很多有價值的資訊;還可以使用更為複雜的模型,來做出更加準確的預測。

從開始有想法到完成整個專案,花了很多時間和精力,畢竟是本人首個完成的實際案例。

在此過程中要感謝EDP老師、同學提供了這麼好的素材; 感謝QQ群裡為我提供幫助的小夥伴們; 還要感謝我的家人和同事,提供了讓我完成的時間與環