Python資料分析與挖掘實戰筆記
文章目錄
1. 資料探索
通過檢測資料集的資料質量、繪製圖表、計算某些特徵量等手段,對樣本資料集的結構和規律進行分析的過程就是資料探索。資料探索有助於選擇合適的資料預處理和建模方法,甚至可以完成一些由資料探勘解決的問題。主要從資料質量分析和資料特徵分析兩個角度對資料進行探索。
1.1 資料質量分析
主要任務 檢測原始資料是否存在髒資料,髒資料一般是指不符合要求,以及不能直接進行相應分析的資料
常見的髒資料
- 缺失值
- 異常值
- 不一致的值
- 重複資料及含有特殊符號如#、¥、*的資料
缺失值主要包括記錄的缺失和記錄中某個欄位資訊的缺失,一般有刪除、插值、忽視等三種方法。異常值分析是檢驗資料是否有錄入錯誤以及有不合常理的資料,其數值明顯偏離其餘的觀測值。也稱離群點分析。有簡單統計量分析、 3 σ 3\sigma 3σ原則、箱型圖分析。一致性分析是指資料的矛盾性或者不相容性,發生在資料整合中,可能資料來自不同資料來源、對於重複存放的資料未能進行一致性更新造成的。
1.2 資料特徵分析
分佈分析能揭示資料的分佈和分佈型別。對於分析定量資料,欲瞭解其分佈形式是對稱的還是非對稱的,發現某些特大或者特小的可疑值,可通過繪製頻率分佈表、繪製頻率分佈直方圖、繪製莖葉圖進行直觀分析;對於分析定性資料,可以繪製餅圖或者條形圖直觀的顯示分佈情況。
定量資料分佈分析
選擇組數和組寬是做頻率分佈分析時最主要的問題。繪製頻率分佈按照下列順序進行。
- 求極差
- 決定組距與組數
- 決定分點
- 列出頻率分佈表
- 繪製頻率分佈直方圖
定性資料分析
常使用變數的分類型別分組,可以採用餅圖或者條形圖描述定性變數的分佈。
對比分析
將兩個相互聯絡的指標進行比較,從數量上展示和說明研究物件規模的大小,水平的高低,速度的快慢,以及各種關係是否協調。適用於指標間的橫縱比較、時間序列的比較分析。
- 絕對資料分析。利用絕對數進行分析。
- 相對數分析
- 結構相對數。將同一總體內的部分數值與全部數值相比得比重,用以說明事物的性質、結構或者質量。如居民食品支出額佔消費支出總額比重、產品合格率等
- 比例相對數。將同一總體內不同部分數值進行對比,表明總體內各部分的比例關係,如人口性別比例、投資和消費比例。
- 比較相對數。將同一時期兩個性質相同的指標數值進行對比,說明同類現象在不同空間條件下的數量對比關係。如不同地區商品價格對比,不同行業、不同企業間某項指標對比。
- 強度相對數。將兩個性質不同但有一定聯絡的總量指標進行對比,用於說明現象的強度、密度、普遍程度。如人均國民生產總值(元/人),人口密度用(人/平方公里)表示,人口出生率使用%0表示。
- 計劃完成程式相對數。某一時期實際完成數和計劃書的對比,用以說明計劃完成程度。
- 動態相對數。將同一現象在不同時期的指標數值進行對比,用以說明發展方向和變化速度。如發展速度、增長速度。
統計量分析
用統計指標對定量資料進行統計描述,常從集中趨勢和離中趨勢兩方面進行分析。平均水平的指標是指對個體集中趨勢的度量,使用最廣泛的是均值和中位數。反應變異程度的指標是對個體離開平均水平的度量,使用較廣泛的是極差、標準差、四分位間距。
極差=最大值-最小值
標準差 s = ∑ ( x i − x ‾ ) 2 n \displaystyle s=\sqrt{\frac{\sum{(x_i-\overline x)^2}}{n}} s=n∑(xi−x)2
變異係數 C V = s x ‾ × 100 % CV=\displaystyle \frac{s}{\overline x}\times 100\% CV=xs×100%。
四分位間距 上四分位-下四分位
info = df.describe()
max_min_sale = info.loc['max','銷售額']-info.loc['min','銷售額']
std_sale = info.loc['std','銷售額']
cv_sale = std_sale/info.loc['mean','銷售額']
distance_4_sale = info.loc['75%','銷售額']-info.loc['25%','銷售額']
週期性分析
探索某個變數是否隨時間變化而呈現出某種週期變化的趨勢,時間序列。
貢獻度分析
貢獻度分析又稱帕累託分析,原理是帕累托法則,對於一個公司來講,80%的利潤來自20%最暢銷的產品,其他80%的產品只產生了20%的利潤。例子產生80%利潤的產品優先增加成本投入,減少其他產品的投入。
相關性分析
分析連續變數之間線性關係程度的強弱,並用適當統計指標表示出來的過程稱為相關分析。
-
直接繪製散點圖,判斷兩個變數之間是否有相關關係
-
繪製散點圖矩陣,考察多個變數之間的相關關係
-
計算相關係數
-
pearson
相關係數,一般用於分析兩個連續變數之間的線性關係,要求連續變數的取值服從正態分佈 -
spearman
秩相關係數。不服從正態分佈的變數、分類或者等級變數之間的關聯性可採用
Spearman
秩相關係數,也稱等級相關係數描述。
r s = 1 − ∑ i = 1 n ( R i − Q ) 2 n ( n 2 − 1 ) r_s=1-\frac{\sum_{i=1}^n(R_i-Q)^2}{n(n^2-1)} rs=1−n(n2−1)∑i=1n(Ri−Q)2
R i R_i Ri表示 x i x_i xi的秩次, Q i Q_i Qi表示 y i y_i yi的秩次, R i − Q i R_i-Q_i Ri−Qi為 x i 、 y i x_i、y_i xi、yi的秩次之差。只要兩個變數之間具有嚴格單調的函式關係,那麼他們就是完全Spearman
相關的。 -
判定係數。即使
pearson
相關係數的平方。
-
2. 資料預處理
資料預處理的內容包括資料清洗、資料整合、資料變換和資料規約。資料預處理一方面要提高資料的質量,另一方面就是讓資料更加適應特定的挖掘技術或工具。統計發現資料預處理工作佔到整個過程的60%。
2.1 資料清洗
資料清洗的任務主要是刪除原始資料集中無關資料、重複資料、平滑噪聲資料、篩選掉與挖掘主題無關的資料,處理缺失值、異常值。
缺失值處理
- 刪除記錄
- 資料插補
- 不處理
常見的資料插補方法
-
均數、中位數、眾數插補
-
使用固定值。將缺失的屬性用一個常量替換,如廣州某工廠外來務工人員基本工資屬性的缺失值可以使用廣州市的外來務工人員工資標準。
-
最近鄰插補。在記錄中找到與缺失樣本最接近的樣本的屬性值插補
-
迴歸方法。對有缺失值的變數,根據已有資料和與其他有關的變數資料建立擬合模型預測缺失度額屬性值
-
插值法。利用已知點建立合適的差值函式 f ( x ) f(x) f(x),未知點由對應的 x i x_i xi求出的函式值 f ( x i ) f(x_i) f(xi)替代
-
拉格朗日插值法
from scipy.interpolate import lagrange #s為原始序列,原始序列的第n個值為null #Lagrange(x,y)函式將(y.index,list(y))當做(x,y)傳入返回一個ploy1d(x),然後傳入x獲取擬合值 def ployinterp_column(s,n,k=5): #利用第n個值的前k個數和後k個數進行插值 y = s[list(range(n-k,n))+list(range(n+1,n+1+k))] y = y[y.notnull()] return lagrange(y.index,list(y))(n)
-
牛頓插值法
-
異常值處理
- 刪除含有異常值的記錄
- 視為缺失值,利用缺失值的方法處理
- 平均值修正,利用前後兩個觀測值的平均修正該異常值
- 不處理,直接在含有異常值的資料上進行挖掘建模
大多數情況下需要分析異常值出現可能原因,再判斷異常值是否應該捨棄,如果是正常的資料,可以直接在含有異常值的資料集上進行建模。
2.2 資料整合
資料整合就是將多個資料來源合併且存放到一個一致的資料儲存中的過程。要考慮實體識別和屬性冗餘的問題,將源資料在最底層上進行轉換、提煉、整合。
實體識別
- 同名異議。資料來源A的屬性ID和資料來源B的屬性ID分別描述菜品編號和訂單編號,描述不同實體。
- 異名同義。資料來源A中的sale_date和資料來源B中的sale_dt都是表示銷售日期的。
- 單位不統一。描述同一實體分別使用國際單位和中國傳統單位。
檢測和解決這些衝突就是實體識別的任務。
冗餘屬性識別
- 同一屬性多次出現
- 同一屬性命名不一致導致重複
2.3 資料變換
對資料進行規範會處理,使資料轉換為適當的形式。
簡單的函式變換
簡單的函式變換是對原始資料進行某些數學變換,常用的變換包括平方、開方、取對數、差分運算等。即
x
′
=
x
2
x
′
=
x
x
′
=
l
o
g
(
x
)
∇
f
(
x
k
)
=
f
(
x
k
+
1
)
−
f
(
x
k
)
x\prime=x^2\\ x\prime=\sqrt{x}\\ x\prime=log(x)\\ \nabla f(x_k)=f(x_{k+1})-f(x_k)
x′=x2x′=xx′=log(x)∇f(xk)=f(xk+1)−f(xk)
簡單的函式變換常用將不具有正態分佈的資料變換成具有正態分佈的資料。在時間序列分析中,簡單的對數變換或者差分運算可將非平穩序列轉換為平穩序列。又比如個人年收入取值範圍在10000元到1億元,使用對數變換對資料進行壓縮是一種常用的變換處理方法。
規範化
為了消除指標之間的量綱和取值範圍差異的影響,需要進行標準化處理,將資料按照比例進行縮放,是指落在一個特定的區域,便於進行綜合分析。
-
離差規範化
x ∗ = x − x m i n x m a x − x m i n \displaystyle x^*=\frac{x-x_{min}}{x_{max}-x_{min}} x∗=xmax−xminx−xmin
-
零-均值規範化
x ∗ = x − x ‾ σ \displaystyle x^*=\frac{x-\overline x}{\sigma} x∗=σx−x
經過處理的資料均值為0,標準差為1
#離差標準化
(df-df.min())/(df.max()-df.min())
#0均值標準化
(df-df.mean())/df.std()
連續屬性離散化
在某些分類演算法中ID3或者Apriori演算法,要求資料是分類屬性形式。常常需將連續屬性變換為分類屬性,即連續屬性離散化。
連續屬性的離散化也就是在資料的取值範圍內設定若干個離散的劃分點,將取值返回劃分為一些離散化的區間,最後用不同的符號或者整數值代表落在整個子區間中的資料值。
常用的離散化方法
-
等寬法
將屬性的值分成具有相同長度的區間,區間的個數有資料本身的特點決定,或者使用者指定,類似於製作頻率分佈表。
#pd.cut(data,number or list,labels) #第二個引數為number時等寬離散化,如果是list預設是區間劃分,和plt.hist()類似 #等寬離散化 k = 4 d1 = pd.cut(data,4,labels=range(k))
-
等頻法
將相同數量的記錄放進不同的區間
# 等頻離散化 w首先化為頻率分佈 w = [1.0*i/k for i in range(k+1)] # 然後獲取對應的百分比的資料 w = data.describe(percentiles=w)[4:4+k+1] w[0] = w[0]*(1-1e-10) d2 = pd.cut(data,w,labels=range(k))
-
基於聚類分析的方法
直接將連續屬性值進行聚類演算法進行聚類,然後將聚類得到的簇進行處理。
# kmeans聚類離散化 from sklearn.cluster import KMeans clf = KMeans(n_clusters=k,n_jobs=4) clf.fit(data.values.reshape((len(data),1))) #記錄聚類中心 c = pd.DataFrame(clf.cluster_centers_).sort_values(0) #求取前兩個均值作為邊界點 w = c.rolling(2).mean().iloc[1:] #獲取分類邊界 w = [0] + list(w[0]) + [data.max()] d3 = pd.cut(data,w,labels=range(k))
屬性構造
為了提取有用的資訊,需要利用已有的屬性集構造新的屬性,並加入到現有的屬性集合中。
例如在防竊電診斷建模時利用已有的供入電量、供出電量,構造出 線 損 率 = 供 入 電 量 − 供 出 電 量 供 入 電 量 \displaystyle 線損率=\frac{供入電量-供出電量}{供入電量} 線損率=供入電量供入電量−供出電量。
小波變換
進行訊號處理、影像處理、語音處理、模式識別、量子物理等領域
2.4 資料規約
資料規約產生更小但保持原資料完整性的新資料集,資料規約的意義
- 降低無效、錯誤資料對建模的影響,提高建模的準確性
- 少量且具有代表性的資料將大幅縮短資料探勘所需的時間
- 降低儲存資料的成本
屬性規約
通過屬性合併建立新屬性維數,或者直接通過刪除不相關屬性來減少資料維數,從而提高資料探勘的效率、降低計算成本。屬性規約的目標是尋找最小屬性子集並確保新資料子集的概率分佈儘可能地接近原來資料集的概率分佈。
常用方法
- 合併屬性。將一些舊屬性合併且新屬性
- 逐步向前選擇
- 逐步向後選擇
- 決策樹歸納。可認為沒有出現在該決策樹上的屬性可認為是無關屬性。
- 主成分分析。主成分分析是一種用於連續屬性的資料降維方法,構造了原始資料的一個正交變換,新空間的基底去除了原始空間基底下資料的相關性,只需使用少數新變數就能解釋原始資料中的大部分變異。在應用中通常使用主成分分析代替原始變數進行建模。
```
sklearn.decomposition.PCA(n_components=None,copy=True,whiten=False)
n_components 要保留的主成分個數
copy 是否在原資料上運算
whiten 是否白化
```
from sklearn.decomposition import PCA
pca = PCA(3)
pca.fit(df)
#降維操作low_d降維之後的資料
low_d = pca.transform(df)
#輸出各成分的貢獻率
print(pca.explained_variance_ratio_)
資料規約
通過選擇替代的、較小的資料減少資料量。有引數的方法是指使用一個模型來評估資料,只需存放引數,不存放實際資料。無引數方法需要存放實際資料,例如直方圖、聚類、抽樣。
-
直方圖的將每個桶換成一個價格的等寬直方圖
-
聚類
-
抽樣。使用比原始資料小的多的隨機樣本表示原始資料。
-
引數迴歸
-
對數線性模型。 l n m = β 0 + β 1 x 1 + ⋯ + β k x k ln m =\beta_0+\beta_1 x_1+\cdots+\beta_kx_k lnm=β0+β1x1+⋯+βkxk。
3.挖掘建模
根據挖掘目標和資料形式可以建立分類與預測、聚類分析、關聯規則、時序模式、偏差檢測等模型,挖掘資料中蘊含的商業價值。
3.1 分類和預測
分類主要是預測分類標號,離散屬性,預測主要是建立連續值函式模型,預測給定自變數對應的因變數的值。
主要的分類和預測演算法
- 迴歸分析
- 決策樹
- 人工神經網路
- 貝葉斯網路
- 支援向量機
主要回歸模型分類
-
線性迴歸
- logistics迴歸,因變數一般有0和1兩種取值
-
非線性迴歸,通過簡單的函式變換
-
參與建模的自變數之間具有多重共線性
-
嶺迴歸
-
主成分迴歸
-
logistics迴歸模型
在n個獨立變數 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn作用下,記取一的概率 p = P ( y = 1 ∣ X ) p=P(y=1|X) p=P(y=1∣X),取0的概率是1-p,取1和取0的概率之比為 p 1 − p \displaystyle \frac{p}{1-p} 1−pp,稱為事件的優勢比odds。對優勢比取對數即可得到logistics變換, l o g i t ( p ) = l n ( p 1 − p ) = z logit(p)=ln(\frac{p}{1-p})=z logit(p)=ln(1−pp)=z,則 p = 1 1 + e − z \displaystyle p=\frac{1}{1+e^{-z}} p=1+e−z1。logistics迴歸模型是建立 l n ( p 1 − p ) ln(\frac{p}{1-p}) ln(1−pp)與自變數的線性迴歸模型。logistics迴歸模型為 l n ( p 1 − p ) = β 0 + β 1 x 1 + ⋯ + β n x n + ϵ ln(\frac{p}{1-p})=\beta_0+\beta_1x_1+\cdots+\beta_nx_n+\epsilon ln(1−pp)=β0+β1x1+⋯+βnxn+ϵ。則 p = 1 1 + e − ( β 0 + β 1 x 1 + ⋯ + β n x n + ϵ ) \displaystyle p=\frac{1}{1+e^{-(\beta_0+\beta_1x_1+\cdots+\beta_nx_n+\epsilon)}} p=1+e−(β0+β1x1+⋯+βnxn+ϵ)1。
3.2 決策樹
採用劃分後樣本集的不確定性作為衡量劃分好壞的標準,用資訊增益值度量不確定性,資訊增益值越大,不確定性越小。ID3在每個非葉結點選擇資訊增益最大的屬性作為測試屬性,可得到當前情況下最純劃分,得到較小的決策樹。
設S為s個資料樣本的集合,假定有m個集合,為 C i ( i = 1 , 2 , ⋯ , m ) C_i(i=1,2,\cdots,m) Ci(i=1,2,⋯,m),設 s i s_i si為類 C i C_i Ci中的樣本數。對於一個給定的樣本,總資訊熵為 I ( s 1 , s 2 , ⋯ , s m ) = − ∑ i = 1 m P i l o g 2 ( P i ) I(s_1,s_2,\cdots,s_m)=-\sum_{i=1}^m P_ilog_2(P_i) I(s1,s2,⋯,sm)=−∑i=1mPilog2(Pi)。
設一個屬性A具有k個不同的值 { a 1 , a 2 , ⋯ , a k } \{a_1,a_2,\cdots,a_k\} {a1,a2,⋯,ak},利用屬性A將集合S劃分為k個子集 { S 1 , S 2 , ⋯ , S k } \{S_1,S_2,\cdots,S_k\} {S1,S2,⋯,Sk}。如果選擇A作為測試屬性,那麼這些子集就是從A生長出去的新的葉結點。設 s i j s_{ij} sij為子集 S j S_j Sj中類別為 C i C_i Ci的樣本數,則根據屬性A劃分樣本的期望資訊熵值為 E ( A ) = ∑ i = 1 k s 1 j + s 2 j + ⋯ + s k j s I ( s 1 j , s 2 j , ⋯ , s m j ) \displaystyle E(A)=\sum_{i=1}^k\frac{s_{1j}+s_{2j}+\cdots+s_{kj}}{s}I(s_{1j},s_{2j},\cdots,s_{mj}) E(A)=i=1∑kss1j+s2j+⋯+skjI(s1j,s2j,⋯,smj)。其中 I ( s 1 j , s 2 j , ⋯ , s m j ) I(s_{1j},s_{2j},\cdots,s_{mj}) I(s1j,s2j,⋯,smj)為子集 S j S_j Sj的資訊熵, s 1 j + s 2 j + ⋯ + s k j s \displaystyle \frac{s_{1j}+s_{2j}+\cdots+s_{kj}}{s} ss1j+s2j+⋯+skj為子集 S j S_j Sj個數佔S個數比例。
最終用屬性A劃分樣本集S後所得資訊增益就是 G a i n ( A ) = I ( s 1 j , s 2 j , ⋯ , s m j ) − E ( A ) Gain(A)=I(s_{1j},s_{2j},\cdots,s_{mj})-E(A) Gain(A)=I(s1j,s2j,⋯,smj)−E(A)。因此資訊增益越大,則選擇A之後對分類的不確定性越小。然後通過遞迴就可以直接建成決策樹。
具體流程
- 對於當前樣本集合,計算所有屬性的資訊增益
- 選擇資訊增益最大的屬性作為測試屬性,把測試屬性相同的樣本劃分為同一個樣本集
- 若子樣本集的類別屬性只有單個屬性,直接劃分為葉子結點;否則對於子樣本集繼續遞迴呼叫本演算法
分類和預測演算法評價
為了有效判斷一個預測或者分類模型的效能表現,需要一組沒有參與預測模型建立的資料集,並在該資料集上評價預測模型的準確率,這組獨立的資料集叫測試集。模型預測效果通常使用相對、絕對誤差,平均絕對誤差、均方誤差、均方根誤差等指標衡量。
- 絕對誤差。 E = Y − Y ^ E=Y-\hat Y E=Y−Y^
- 相對誤差。 e = Y − Y ^ Y \displaystyle e=\frac{Y-\hat Y}{Y} e=YY−Y^
- 平均絕對誤差。 M A E = 1 n ∑ i = 1 n ∣ Y i − Y ^ i ∣ MAE=\frac{1}{n}\sum_{i=1}^n\vert Y_i-\hat Y_i\vert MAE=n1∑i=1n∣Yi−Y^i∣
- 均方誤差。 M S E = 1 n ∑ i = 1 n ( Y i − Y ^ i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n(Y_i-\hat Y_i)^2 MSE=n1∑i=1n(Yi−Y^i)2
- 均方根誤差。 R M S E = M S E RMSE=\sqrt{MSE} RMSE=MSE
- 平均絕對百分誤差。 M A P E = 1 n ∑ i = 1 n ∣ Y i − Y ^ i Y i ∣ \displaystyle MAPE=\frac{1}{n}\sum_{i=1}^n\vert \frac{Y_i-\hat Y_i}{Y_i}\vert MAPE=n1i=1∑n∣YiYi−Y^i∣
- Kappa統計。
- 識別準確度。 A c c u r a c y = T P + F N T P + T N + F P + F N \displaystyle Accuracy=\frac{TP+FN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+FN
- 識別精確率。 P r e c i s i o n = T P T P + F P \displaystyle Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
- 召回率。 R e c a l l = T P T P + T N Recall = \frac{TP}{TP+TN} Recall=TP+TNTP
- ROC曲線。
- 混淆矩陣。
3.3 聚類分析
資料型別相似度的度量
對於連續屬性,首先對各個屬性值進行零均值規範,再進行距離的計算。樣本和簇之前的距離可以使用樣本到簇中心的距離 d ( e i , x ) d(e_i,x) d(ei,x);簇與簇之間的距離可以用簇中心的距離 d ( e i , e j ) d(e_i,e_j) d(ei,ej)。
- 連續屬性的SSE。 S S E = ∑ i = 1 K ∑ x ∈ E i d i s t ( e i , x ) 2 \displaystyle SSE=\sum_{i=1}^K\sum_{x\in E_i}dist(e_i,x)^2 SSE=i=1∑Kx∈Ei∑dist(ei,x)2
- 文件資料的SSE。 S S E = ∑ i = 1 K ∑ x ∈ E i c o s ( e i , x ) 2 \displaystyle SSE=\sum_{i=1}^K\sum_{x\in E_i}cos(e_i,x)^2 SSE=i=1∑Kx∈Ei∑cos(ei,x)2
- 簇 E i E_i Ei的聚類中心 e i e_i ei的計算公式為 e i = 1 n ∑ x ∈ E i x \displaystyle e_i=\frac{1}{n}\sum_{x\in E_i}x ei=n1x∈Ei∑x
聚類分析的演算法評價,聚類演算法的目標是實現組內物件之間的相似,不同組之間的物件是不同的。組內的相似性越大,元件差別越大,聚類效果越好。
-
purity評價法,只需計算正確聚類數佔總數的比例, ( x 1 , x 2 , ⋯ , x k ) (x_1,x_2,\cdots,x_k) (x1,x2,⋯,xk)為聚類的集合, ( y 1 , y 2 , ⋯ , y k ) (y_1,y_2,\cdots,y_k) (y1,y2,⋯,yk)表示需要被聚類的集合,n表示被聚類集合物件的總數。
p u r i t y = 1 n ∑ k m a x ∣ x k ∩ y i ∣ \displaystyle purity=\frac{1}{n}\sum_k max\vert x_k\cap y_i\vert purity=n1k∑max∣xk∩yi∣
-
RI評價法
R I = R + W R + M + D + W RI=\frac{R+W}{R+M+D+W} RI=R+M+D+WR+W -
F值評價法
F α = ( 1 + α 2 p r ) α 2 p + r p = R R + M r = R R + D F_{\alpha}=\frac{(1+\alpha^2pr)}{\alpha^2p+r}\\ p=\frac{R}{R+M}\\ r=\frac{R}{R+D}\\ Fα=α2p+r(1+α2pr)p=R+MRr=R+DR
改進的RI評價法,將p和r視為不同的重要性
3.4 關聯規則
關聯規則分析目的是在一個資料集中找出各項之間的關聯關係。
項集A、B同時發生的概率稱為關聯規則的支援度,也稱為相對支援度。 S u p p o r t ( A ⇒ B ) = P ( A ∪ B ) Support(A\Rightarrow B)=P(A\cup B) Support(A⇒B)=P(A∪B)
項集A發生,則項集B發生的概率為關聯規則的置信度。 C o n f i d e n c e ( A ⇒ B ) = P ( B ∣ A ) Confidence(A\Rightarrow B)=P(B|A) Confidence(A⇒B)=P(B∣A)
最小支援度是使用者或專家定義的衡量支援度的一個閾值,表示專案集在統計意義上最低可能性;最小置信度是使用者或專家定義的衡量置信度的一個閾值,表示關聯規則的最低可能性。同時滿足最小支援度閾值和最小置信度閾值的規則稱為強規則。
項集 項的集合。包含k項的項集稱為k項集,比如集合 { 牛 奶 , 麥 片 , 糖 } \{牛奶,麥片,糖\} {牛奶,麥片,糖}是一個三項集。項集的出現頻率為所有包含項集的事務計數,又稱為絕對支援度或支援度計數。如果項集I的相對支援度滿足預定義的最小支援度閾值,則I是頻繁項集。頻繁k項集通常記作k。
項集A的支援度計數是事務資料集中包含項集A的事務個數,簡稱為項集的頻率或計數。
S
u
p
p
o
r
t
(
A
⇒
B
)
=
A
,
B
同
時
發
生
的
事
務
的
個
數
所
有
事
務
個
數
=
S
u
p
p
o
r
t
_
c
o
u
n
t
(
A
∩
B
)
T
o
t
a
l
_
c
o
u
n
t
C
o
n
f
i
d
e
n
c
e
(
A
⇒
B
)
=
P
(
B
∣
A
)
=
S
u
p
p
o
r
t
(
A
∩
B
)
S
u
p
p
o
r
t
(
A
)
=
S
u
p
p
o
r
t
_
c
o
u
n
t
(
A
∩
B
)
S
u
p
p
o
r
t
_
c
o
u
n
t
(
A
)
Support(A\Rightarrow B)=\frac{A,B同時發生的事務的個數}{所有事務個數}=\frac{Support\_count(A\cap B)}{Total\_count}\\ Confidence(A\Rightarrow B)=P(B|A)=\frac{Support(A\cap B)}{Support(A)}=\frac{Support\_count(A\cap B)}{Support\_count(A)}
Support(A⇒B)=所有事務個數A,B同時發生的事務的個數=Total_countSupport_count(A∩B)Confidence(A⇒B)=P(B∣A)=Support(A)Support(A∩B)=Support_count(A)Support_count(A∩B)
幾種常見的關聯規則演算法
- Apriori
- FP-Tree
- Eclat演算法
- 灰度關聯法
Apriori
演算法基本原理
性質
頻繁項集的所有非空子集必須是頻繁項集。向不是頻繁項集的項集中新增事務A,新的事物 I ∪ A I\cup A I∪A一定也不是頻繁項集。
實現
- 找出所有的頻繁項集,連線步和剪枝步融合,最終得到最大頻繁項集
L
k
L_k
Lk。
- 連線步。對於給定的最小支援度閾值,分別對1項候選集 C 1 C_1 C1,剔除小於該閾值的項集得到1項頻繁集 L 1 L_1 L1。下一步由 L 1 L_1 L1自身連線產生2項候選集 C 2 C_2 C2,保留 C 2 C_2 C2中滿足約束條件的項集得到2項頻繁項集 L 1 、 L 2 L_1、L_2 L1、L2。再下一步 L 1 L_1 L1和 L 2 L_2 L2連線產生候選集 C 3 C_3 C3,保留 C 3 C_3 C3中滿足約束條件的項集得到3項頻繁項集,記為 L 3 L_3 L3,一直持續下去。
- 剪枝步。剪枝步緊接著連線步,在產生候選項
C
k
C_k
Ck的過程中起到減小搜尋空間的目的。由於
C
k
C_k
Ck是由
L
k
−
1
L_{k-1}
Lk−1和
L
k
L_k
Lk連線產生的,由於
Apriori
的性質頻繁項集的所有非空子集也必須是頻繁項集,所有不滿足該性質的項集不會出現在 C k C_k Ck中,該過程就是剪枝。
- 由頻繁項集產生強關聯規則,由過程1可知超過預訂最小支援度閾值的項集已被剔除,如果剩下這些規則又滿足了預訂的最小置信度閾值,那就挖掘出了強關聯規則。
#搜尋頻繁項集的例子
from apriori import *
data = pd.read_excel(PATH+"menu_orders.xls",header=None)
ct = lambda x:pd.Series(1,index=x[pd.notnull(x)])
b = map(ct,data.values)
data = pd.DataFrame(list(b)).fillna(0)
print("轉換完畢")
del b
support = 0.2
confidence = 0.5
ms = '----'
find_rule(data,support,confidence,ms)
3.5 時間序列
常用按時間順序排列的一組隨機變數 X 1 , X 2 , ⋯ , X t X_1,X_2,\cdots,X_t X1,X2,⋯,Xt來表示一個隨機事件的時間序列,簡記 { X t } \{X_t\} {Xt}。用 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn表示該隨機序列的n個有序觀察值,稱之為序列長度為n的觀察值序列。時間序列的目的就是給定了一個已被觀測了的時間序列,預測該序列的未來值。
常用的時間序列模型
- 平滑法
- 趨勢擬合法
- 組合模型
- AR模型
- MA模型
ARMA
模型ARIMA
模型- ARCH模型
GARCH
模型及其衍生模型
時間序列的預處理
拿到一個觀察值序列首先對其純隨機性和平穩性進行檢驗,根據檢驗結果可將序列劃分為不同型別,對不同型別序列使用不同分析方法。
對於純隨機序列,又稱為白噪聲序列,序列的各項之間沒有任何相關關係,序列在進行完全無序的隨機波動,可終止對該序列的分析,白噪聲序列是沒有資訊可提取的平穩序列。
對於平穩非白噪聲序列,其均值和方差為常數,ARMA模型是常用的平穩序列擬合模型。
對於非平穩序列,由於其均值和方差不穩定,處理方法一般是將其轉化為平穩序列,就可應用有關平穩時間序列的分析方法。如果一個時間序列經差分運算之後有平穩性,則該序列為差分平穩序列,可使用ARIMA
模型進行分析。
平穩性檢驗
-
時序圖檢驗
-
自相關圖檢驗
-
單位根檢驗
純隨機性檢驗
平穩時間序列分析
AR模型
具有如下結構的模型稱為p階自迴歸模型,簡稱為 A R ( p ) AR(p) AR(p)。
x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ϵ t x_t=\phi_0+\phi_1 x_{t-1}+\phi_2x_{t-2}+\cdots+\phi_px_{t-p}+\epsilon_t xt=ϕ0+ϕ1xt−1+ϕ2xt−2+⋯+ϕpxt−p+ϵt
即在t時刻的隨機變數 X t X_t Xt的取值 x t x_t xt是前p期 x t − 1 , x t − 2 , ⋯ , x t − p x_{t-1},x_{t-2},\cdots,x_{t-p} xt−1,xt−2,⋯,xt−p的多元線性迴歸,認為 x t x_t xt主要是受過去p期序列值的影響,誤差項 ϵ t \epsilon_t ϵt是當前的隨機干擾,為零均值白噪聲序列。
統計量 | 性質 | 統計量 | 性質 |
---|---|---|---|
均值 | 常數均值 | 自相關係數acf | 拖尾 |
方差 | 常數均值 | 偏自相關係數pacf | p階拖尾 |
均值 μ = ϕ 0 1 − ϕ 1 − ϕ 2 − ⋯ − ϕ p \displaystyle \mu=\frac{\phi_0}{1-\phi_1-\phi_2-\cdots-\phi_p} μ=1−ϕ1−ϕ2−⋯−ϕpϕ0
方差 平穩 A R ( p ) AR(p) AR(p)模型的方差有界,等於常數。
自相關係數 ρ k = ρ ( t , t − k ) = c o v ( X t , X t − k ) ρ t ρ t − k \displaystyle \rho_k=\rho(t,t-k)=\frac{cov(X_t,X_{t-k})}{\rho_t\rho_{t-k}} ρk=ρ(t,t−k)=ρtρt−kcov(Xt,Xt−k)
偏自相關係數 P A C F PACF PACF 具有p階截尾性
MA模型
具有如下結構的q階自迴歸模型,簡記為MA(q)。
x t = μ + ϵ t − θ 1 ϵ t − 1 − ⋯ − θ q ϵ t − q \displaystyle x_t=\mu+\epsilon_t-\theta_1\epsilon_{t-1}-\cdots-\theta_q\epsilon_{t-q} xt=μ+ϵt−θ1ϵt−1−⋯−θqϵt−q
即在t時刻的隨機變數 X t X_t Xt的取值 x t x_t xt是前q期的隨機擾動 ϵ t − 1 , ϵ t − 2 , ⋯ , ϵ t − q \epsilon_{t-1},\epsilon_{t-2},\cdots,\epsilon_{t-q} ϵt−1,ϵt−2,⋯,ϵt−q的多元線性函式,誤差項是當期的隨機干擾 ϵ t \epsilon_t ϵt,為零均值白噪聲均值序列,認為 x t x_t xt主要是受過去q期誤差項的影響。
統計量 | 性質 | 統計量 | 性質 |
---|---|---|---|
均值 | 常數均值 | 自相關係數ACF | q階截尾 |
方差 | 常數方差 | 偏自相關係數PACF | 拖尾 |
ARMA
模型
具有如下結構的模型稱為自迴歸移動平均模型,簡記為 A R M A ( p , q ) ARMA(p,q) ARMA(p,q)。
x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ϵ t + ϵ t − θ 1 ϵ t − 1 − ⋯ − θ q ϵ t − q x_t=\phi_0+\phi_1 x_{t-1}+\phi_2x_{t-2}+\cdots+\phi_px_{t-p}+\epsilon_t+\epsilon_t-\theta_1\epsilon_{t-1}-\cdots-\theta_q\epsilon_{t-q} xt=ϕ0+ϕ1xt−1+ϕ2xt−2+⋯+ϕpxt−p+ϵt+ϵt−θ1ϵt−1−⋯−θqϵt−q
即在t時刻的隨機變數 X t X_t Xt的取值 x t x_t xt是前p期 x t − 1 , x t − 2 , ⋯ , x t − p x_{t-1},x_{t-2},\cdots,x_{t-p} xt−1,xt−2,⋯,xt−p和前q期 ϵ t − 1 , ϵ t − 2 , ⋯ , ϵ t − q \epsilon_{t-1},\epsilon_{t-2},\cdots,\epsilon_{t-q} ϵt−1,ϵt−2,⋯,ϵt−q的多元線性函式,誤差項是當前的隨機干擾項 ϵ t \epsilon_t ϵt,為零均值白噪聲序列。認為 x t x_t xt主要受過去p期序列值和過去q期的誤差項的共同影響。
特別的,當q=0是,ARMA模型為AR(p)模型;當p=0時,是MA(q)模型。
統計量 | 性質 | 統計量 | 性質 |
---|---|---|---|
均值 | 常數均值 | 自相關係數ACF | p階拖尾 |
方差 | 常數方差 | 偏自相關係數PACF | q階拖尾 |
平穩時間序列建模
- 計算ACF和PACF。先計算非平穩白噪聲序列的自相關係數ACF和偏自相關係數PACF
- ARMA模式識別。也稱為模型定階,由AR§,MA(q),和ARMA(p,q)的自相關係數和偏自相關係數的性質,選擇合適的模型
- 估計模型中未知引數的值並進行引數進行檢驗
- 模型檢驗
- 模型優化
- 模型應用,進行短期預測
非平穩時間序列分析
對非平穩時間序列分析可以分為確定性因素分解的時序分析和隨機時序分析兩大類。
確定性因素分解方法把所有序列的變化都歸結為4個因素,長期趨勢,季節變動,迴圈變動,隨機波動的綜合影響,其中長期趨勢和季節變動的規律性資訊通常比較容易提取,而由隨機因素導致的波動難以確定和分析,對隨機資訊浪費嚴重,會導致模型擬合精度不夠理想。
隨機時序分析法就是為了彌補確定性因素分解方法的不足,根據時間序列的不同特點,有ARIMA
模型、殘差自迴歸模型、季節模型、異方差模型。
-
差分運算。
- p階差分。相距一期的兩個序列值之間的減法運算稱為1階差分運算。
- k步差分。相距k期的兩個序列值之間的減法運算稱為k步差分運算。
-
ARIMA
模型差分運算具有強大的確定性資訊提取能力,許多非平穩序列差分之後會顯示出平穩序列的性質,稱該非平穩序列為差分平穩序列。對差分平穩序列可以使用
ARMA
模型進行擬合。
3.6 離群點檢測
任務是發現與大部分其他物件顯著不同的物件,大部分資料探勘方法將差異資訊視為噪聲丟棄,然而在一些應用中,罕見的資料可能蘊含極大的研究價值。
離群點檢測被廣泛應用於電信和信用卡的詐騙檢測,貸款審批,電子商務,網路入侵和天氣預報等領域。比如可以使用離群點檢測分析運動員的統計資料,以發現異常的運動員。
離群點的成因 資料來源不同的類,自然變異,資料測量,收集誤差
離群點的型別
- 從資料範圍。全域性離群點和區域性離群點。
- 從資料型別。數值型離群點和分型別離群點。
- 從屬性個數。一維離群點和多維離群點。
常用的離群點檢測方法
- 基於統計。大部分是基於統計的離群點檢測方法是構建一個概率分佈模型,並計算物件符合該模型的概率,把具有低概率的物件視為離群點
- 基於鄰近度。通常可以把資料物件之間定義鄰近性度量,把遠離大部分點的物件視為離群點
- 基於密度。考慮資料集可能存在不同密度區域,基於密度的觀點分析,離群點是在低密度區域中的物件。一個物件的離群點得分是該物件周圍密度的逆
- 基於聚類。一種利用聚類檢測離群點的方法是丟棄遠離其他簇的小簇。
一元正態分佈中的離群點檢測
將 x x x進行0-1標準化,然後根據 3 σ 3\sigma 3σ原則在 ( − ∞ , − 3 ) ∪ ( 3 , ∞ ) (-\infty,-3)\cup(3,\infty) (−∞,−3)∪(3,∞)範圍之內的被稱為離群點。
基於KMeans
或者DBSCAN
聚類找出離群點。
相關文章
- 《Python資料分析與挖掘實戰》-- 讀書筆記(2)-- 2019Python筆記
- Python資料分析與挖掘實戰(資料預處理)Python
- 《Python資料分析與挖掘實戰》原始碼下載Python原始碼
- Python資料分析與挖掘實戰(Pandas,Matplotlib常用方法)Python
- Python資料分析與挖掘實戰(開發流程及常用庫安裝)Python
- 資料分析與挖掘-挖掘建模
- 基於python的大資料分析實戰學習筆記-pandas(資料分析包)Python大資料筆記
- 漏洞挖掘-靜態分析實驗筆記筆記
- Python | 資料分析實戰ⅠPython
- Python | 資料分析實戰 ⅡPython
- (五)numpy知識學習2-python資料分析與機器學習實戰(學習筆記)Python機器學習筆記
- 基於python的大資料分析實戰學習筆記-AnacondaPython大資料筆記
- Python資料分析 DataFrame 筆記Python筆記
- Python資料分析 numpy 筆記Python筆記
- Python資料分析 Series 筆記Python筆記
- 基於python的大資料分析實戰學習筆記-pandas之DataFramePython大資料筆記
- 《Python核心技術與實戰》筆記3Python筆記
- Python 和 R 資料分析/挖掘工具互查Python
- 電商大資料學習筆記:實戰大資料筆記
- 深入 Python 資料分析:高階技術與實戰應用Python
- 記一次CVE實戰挖掘記錄
- 1688商品資料API介面的資料分析與挖掘技巧API
- 電商API介面的大資料分析與挖掘技巧API大資料
- 【筆記】-《Redis實戰》- 01 Redis資料結構筆記Redis資料結構
- Mysql百萬級資料遷移實戰筆記MySql筆記
- 《資料結構與演算法分析》筆記資料結構演算法筆記
- 學習筆記(30):Python資料清洗實戰-Excel檔案讀寫筆記PythonExcel
- 資料分析與挖掘 - R語言:KNN演算法R語言KNN演算法
- Python技術棧與Spark交叉資料分析雙向整合進階實戰–大資料ML樣本集案例實戰PythonSpark大資料
- Python技術棧與Spark交叉資料分析雙向整合技術實戰--大資料ML樣本集案例實戰PythonSpark大資料
- Python技術棧與Spark交叉資料分析雙向整合進階實戰--大資料ML樣本集案例實戰PythonSpark大資料
- 學習筆記(1):Python零基礎入門到實戰-資料科學原理與資料處理流程筆記Python資料科學
- Python基於代理IP的挖掘與分析Python
- 《Spark 3.0大資料分析與挖掘:基於機器學習》簡介Spark大資料機器學習
- 資料分析與挖掘 - R語言:多元線性迴歸R語言
- 大資料建模、分析、挖掘技術大資料
- 基於python的大資料分析-資料處理(程式碼實戰)Python大資料
- SQL實戰-資料分析師-筆試面試-每日一練SQL筆試面試