
讓Python猜猜你是否能約會(huì)成功
我是一個(gè)婚戀網(wǎng)站的數(shù)據(jù)分析師,新入職的第二天,接到老板的任務(wù),讓我預(yù)測(cè)來(lái)婚戀網(wǎng)站新注冊(cè)的男生&女生是否會(huì)約會(huì)成功。
如何預(yù)測(cè)一個(gè)新來(lái)的男生是否會(huì)約會(huì)成功呢?這很簡(jiǎn)單,只需要調(diào)出一下數(shù)據(jù)庫(kù)中之前注冊(cè)網(wǎng)站的會(huì)員信息及跟蹤情況,看看和這個(gè)新來(lái)的男生條件最接近的男生是否約會(huì)成功了,那么就可以大致預(yù)估新來(lái)的男生是否會(huì)約會(huì)成功。中國(guó)有句老話叫做“近朱者赤,近墨者黑”,正是這個(gè)道理。比如下圖,假設(shè)我們將男生的條件劃分為三個(gè)維度,顏值、背景和收入。藍(lán)色點(diǎn)代表約會(huì)成功,灰色點(diǎn)代表未約會(huì)成功。紅色點(diǎn)代表新來(lái)的男生,他和兩個(gè)藍(lán)色點(diǎn),一個(gè)灰色點(diǎn)最接近,因此點(diǎn)約會(huì)成功的可能性是2/3。
KNN算法簡(jiǎn)介
上述思路所用到的數(shù)據(jù)挖掘算法為KNN算法, KNN(K Nearest Nighbor),K最鄰域法屬于惰性算法,其特點(diǎn)是不事先建立全局的判別公式和規(guī)則。當(dāng)新數(shù)據(jù)需要分類的時(shí)候,根據(jù)每個(gè)樣本和原有樣本的距離,取最近K個(gè)樣本點(diǎn)的眾數(shù)(Y為分類變量)或者均值(Y為連續(xù)變量)作為新樣本的預(yù)測(cè)值。實(shí)做KNN只需要考慮以下三件事情:
1. 數(shù)據(jù)的前處理
數(shù)據(jù)的屬性有Scale的問(wèn)題,比如收入和年齡的量綱單位不同,則不能簡(jiǎn)單的加總來(lái)計(jì)算距離,需要進(jìn)行極值的正規(guī)化,將輸入變量維度的數(shù)據(jù)都轉(zhuǎn)換到【0,1】之間,這樣才能進(jìn)行距離的計(jì)算。計(jì)算公式如下:
2. 距離的計(jì)算
一般使用歐幾里得距離,勾股定理大家都學(xué)過(guò),計(jì)算兩點(diǎn)之間的距離,不多說(shuō)。
3. 預(yù)測(cè)結(jié)果的推估
預(yù)測(cè)過(guò)程中我們會(huì)同時(shí)輸出預(yù)測(cè)的概率值,同時(shí)我們需要去了解幾個(gè)指標(biāo)的含義。
回應(yīng)率(precision):
捕捉率(recall):
F指標(biāo)(f1-score):F指標(biāo) 同時(shí)考慮Precision & Recall
使用Python進(jìn)行實(shí)做
此部分的思路如下:
1. 讀入數(shù)據(jù)集
2. 描述性分析與探索性分析
3. KNN模型建立
4. 模型的效果評(píng)估
數(shù)據(jù)集描述:此數(shù)據(jù)集為取自某婚戀網(wǎng)站往期用戶信息庫(kù),含100個(gè)觀測(cè),8個(gè)變量。
# 加載所需包
%matplotlib inline
import os
import numpy as np
from scipy import stats
import pandas as pd
import sklearn.model_selection as cross_validation
import matplotlib.pyplot as plt
import seaborn as sns
import math
from scipy import stats,integrate
import statsmodels.api as sm
# 加載數(shù)據(jù)并查看前5行
orgData = pd.read_csv('date_data2.csv')
orgData.head()
我從數(shù)據(jù)庫(kù)中挑選了收入、魅力值、資產(chǎn)、教育等級(jí)變量,并對(duì)收入、魅力值和資產(chǎn)進(jìn)行了分類排序。
# 查看數(shù)據(jù)集的信息
orgData.info()
從上述信息可以看出數(shù)據(jù)集總共有100個(gè)觀測(cè),8個(gè)變量。其中浮點(diǎn)型2個(gè),整型6個(gè)。還可以看出這個(gè)數(shù)據(jù)集占用了我電腦7k的內(nèi)存。
# 對(duì)數(shù)值型變量做描述性統(tǒng)計(jì)分析
orgData.describe()
Python的語(yǔ)法就是這么簡(jiǎn)潔到令人發(fā)指。從上述信息我們可以觀察到各變量的計(jì)數(shù)、最大值、最小值、平均值等信息。以income為例,平均值為9010元,中位數(shù)為7500元。我們猜想是收入被平均了,如何更直觀的看到呢?很簡(jiǎn)單,我們畫個(gè)直方圖。
# 數(shù)據(jù)可視化探索
# 查看收入分布情況 直方圖
sns.distplot(orgData['income'],fit=stats.norm);
果然,我們的收入被平均了。其他的數(shù)值型變量也可以照同樣方法畫畫看。同時(shí),我們想看看類別型的字段和目標(biāo)變量的關(guān)系。
# 查看教育等級(jí)和是否約會(huì)成功 條形圖
sns.barplot(x='educlass',y='Dated',data=orgData);
果然,教育等級(jí)越高的人約會(huì)成功的概率越高。這么多分類變量,我如何在一張圖中呈現(xiàn)呢?很簡(jiǎn)單,設(shè)定面板數(shù),這里我們分類的計(jì)數(shù)圖。
# 查看各分類變量和目標(biāo)變量關(guān)系
fig, (axis1,axis2,axis3,axis4) = plt.subplots(1,4,figsize=(15,5))
sns.countplot(x='Dated', hue="educlass", data=orgData, order=[1,0], ax=axis1)
sns.countplot(x='Dated', hue="income_rank", data=orgData, order=[1,0], ax=axis2)
sns.countplot(x='Dated', hue="attractive_rank", data=orgData, order=[1,0], ax=axis3)
sns.countplot(x='Dated', hue="assets_rank", data=orgData, order=[1,0], ax=axis4)
可以看出,教育等級(jí),收入,魅力值,資產(chǎn)都和是否約會(huì)成功有密切關(guān)系。
說(shuō)了這么多,下面我們開(kāi)始用KNN建模,讓機(jī)器告訴我們結(jié)果吧。
# 選取自變量和因變量
X = orgData.ix[:, :4]
Y = orgData[['Dated']]
X.head()
# 進(jìn)行極值的標(biāo)準(zhǔn)化
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X_scaled = min_max_scaler.fit_transform(X)
X_scaled[1:5]
此部分返回了自變量進(jìn)行標(biāo)準(zhǔn)化之后的2~5行值。
#劃分訓(xùn)練集和測(cè)試集
train_data, test_data, train_target, test_target = cross_validation.train_test_split(
X_scaled, Y, test_size=0.2, train_size=0.8, random_state=123)
劃分訓(xùn)練集和測(cè)試集,訓(xùn)練集用來(lái)訓(xùn)練模型,測(cè)試集用來(lái)測(cè)試模型,訓(xùn)練集樣本和測(cè)試集樣本量比例為8:2.同時(shí)設(shè)定隨機(jī)種子數(shù)。
# 建模
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3) # 默認(rèn)歐氏距離
model.fit(train_data, train_target.values.flatten())
test_est = model.predict(test_data)
我們首先從導(dǎo)入了KNN分類器,k值設(shè)置為3,然后用模型去訓(xùn)練訓(xùn)練集,并且用測(cè)試數(shù)據(jù)集來(lái)測(cè)試模型結(jié)果,輸出到test_est對(duì)象中。
# 模型評(píng)估
import sklearn.metrics as metrics
print(metrics.confusion_matrix(test_target, test_est, labels=[0, 1])) # 混淆矩陣
print(metrics.classification_report(test_target, test_est))
可以看出,模型的命中率和回應(yīng)率均值都達(dá)到了90%。F指標(biāo)為0.9
好了,模型的結(jié)果還勉強(qiáng)滿意,美滋滋,做個(gè)報(bào)告去和老板交差了。
【后話】當(dāng)然,這里面只是用了一個(gè)簡(jiǎn)單的數(shù)據(jù)集去實(shí)操了一下KNN的做法,操作和語(yǔ)法都比較簡(jiǎn)單易用理解,同時(shí)遍歷了一下我們數(shù)據(jù)挖掘的流程,相應(yīng)的知識(shí)及后續(xù)的知識(shí)沒(méi)有做過(guò)多的展開(kāi),比如前端的數(shù)據(jù)如何清洗,KNN中K值如何設(shè)定和交叉驗(yàn)證,使用樸素貝葉斯預(yù)測(cè)模型的準(zhǔn)確率,特征選擇,模型融合等。希望大家能有所收獲。
~ From CDA學(xué)員
CDA LEVEL II-Python數(shù)據(jù)挖掘課程,10.14開(kāi)課,本課程以案例為主線,結(jié)合開(kāi)源Python工具,全面金融、電信、銀行等行業(yè)的主要數(shù)據(jù)挖掘主題。而且注重業(yè)務(wù)與算法的深入結(jié)合,在輕松的氛圍內(nèi)體會(huì)算法的奇妙之處。
【課程信息】
北京&遠(yuǎn)程直播:10月14~10月29
授課安排:現(xiàn)場(chǎng)班5900元,遠(yuǎn)程班4400元
(1) 授課方式:面授直播兩種形式,中文多媒體互動(dòng)式授課方式
(2) 授課時(shí)間:上午9:00-12:00,下午13:30-16:30,16:30-17:00(答疑)
(3) 學(xué)習(xí)期限:現(xiàn)場(chǎng)與視頻結(jié)合,長(zhǎng)期學(xué)習(xí)加練習(xí)答疑。
【課程階段】
第一階段:[10.14] 數(shù)據(jù)挖掘與Python入門
第二階段:[10.15] 數(shù)據(jù)挖掘模型與組合算法
第三階段:[10.21] KNN與線性回歸
第四階段:[10.22] 邏輯回歸與SVM
第五階段:[10.28] 文本分析與社會(huì)網(wǎng)絡(luò)分析
第六階段:[10.29] 綜合案例分析
第七階段:[線上選修] 數(shù)據(jù)分析統(tǒng)計(jì)基礎(chǔ)理論(一周)
第八階段:[線上選修] Mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)(一周)
第九階段:[線上選修] Python數(shù)據(jù)可視化(一周)
【課程講師】
王小川
CDA數(shù)據(jù)分析師講師/同濟(jì)大學(xué)管理學(xué)博士
現(xiàn)就職于國(guó)內(nèi)某大型券商研究所,從事量化投資相關(guān)工作,并承擔(dān)了部分高校統(tǒng)計(jì)課程教學(xué)任務(wù)。長(zhǎng)期研究機(jī)器學(xué)習(xí)在統(tǒng)計(jì)學(xué)中的應(yīng)用,精通MATLAB、Python、SAS等統(tǒng)計(jì)軟件,熱衷數(shù)據(jù)分析和數(shù)據(jù)挖掘工作,有著扎實(shí)的理論基礎(chǔ)和豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。著有《MATLAB神經(jīng)網(wǎng)絡(luò)30個(gè)案例分析》一書。
趙仁乾
CDA數(shù)據(jù)分析研究院講師/京郵電大學(xué)管理科學(xué)與工程碩士
現(xiàn)就職于北京電信規(guī)劃設(shè)計(jì)院,從事移動(dòng)、聯(lián)通集團(tuán)及各省分公司市場(chǎng)、業(yè)務(wù)、財(cái)務(wù)規(guī)劃、經(jīng)濟(jì)評(píng)價(jià)及運(yùn)營(yíng)咨詢。重點(diǎn)研究方向包括離網(wǎng)用戶挖掘、市場(chǎng)細(xì)分與精準(zhǔn)營(yíng)銷、移動(dòng)網(wǎng)絡(luò)價(jià)值區(qū)域分析、潛在價(jià)值客戶挖掘等。
聯(lián)系方式:
王老師
Tel:18511302788
QQ:2881989710
Mail:wzd@cda.cn
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03