相关和因果是一回事吗?R值低就是不相关?终于有人讲明白了
導(dǎo)讀:相關(guān)性分析是指對多個具備相關(guān)關(guān)系的變量進(jìn)行分析,從而衡量變量間的相關(guān)程度或密切程度。相關(guān)性可以應(yīng)用到所有數(shù)據(jù)的分析過程中,任何事物之間都是存在一定的聯(lián)系。相關(guān)性用R(相關(guān)系數(shù))表示,R的取值范圍是[-1, 1]。
?
作者:宋天龍 來源:大數(shù)據(jù)DT(ID:bigdatadt)?
?
?
01?相關(guān)和因果是一回事嗎
?
相關(guān)性不等于因果。用x1和x2作為兩個變量進(jìn)行解釋,相關(guān)意味著x1和x2是邏輯上的并列相關(guān)關(guān)系,而因果聯(lián)系可以解釋為因?yàn)閤1所以x2(或因?yàn)閤2所以x1)的邏輯關(guān)系,二者是完全不同的。
?
用一個運(yùn)營示例來說明二者的關(guān)系:做商品促銷活動時,通常都會以較低的價格進(jìn)行銷售,以此來實(shí)現(xiàn)較高的商品銷量;隨著商品銷售的提升,也給線下物流配送體系帶來了更大的壓力,在該過程中通常會導(dǎo)致商品破損量的增加。
?
本案例中,商品低價與破損量增加并不是因果關(guān)系,即不能說因?yàn)樯唐穬r格低所以商品破損量增加;二者的真實(shí)關(guān)系是都是基于促銷這個大背景下,低價和破損量都是基于促銷產(chǎn)生的。
?
相關(guān)性的真實(shí)價值不是用來分析“為什么”的,而是通過相關(guān)性來描述無法解釋的問題背后真正成因的方法。相關(guān)性的真正的價值是能知道“是什么”,即無論通過何種因素對結(jié)果產(chǎn)生影響,最終出現(xiàn)的規(guī)律就是二者會一起增加或降低等。
?
仍然是上面的案例,通過相關(guān)性分析我們可以知道,商品價格低和破損量增加是相伴發(fā)生的,這意味著當(dāng)價格低的時候(通常是做銷售活動,也有可能產(chǎn)品質(zhì)量問題、物流配送問題、包裝問題等),我們就想到破損量可能也會增加。但是到底由什么導(dǎo)致的破損量增加,是無法通過相關(guān)性來得到的。
?
?
02 相關(guān)系數(shù)低就是不相關(guān)嗎
?
R(相關(guān)系數(shù))低就是不相關(guān)嗎?其實(shí)不是。
?
-
R的取值可以為負(fù),R=-0.8代表的相關(guān)性要高于R=0.5。負(fù)相關(guān)只是意味著兩個變量的增長趨勢相反,因此需要看R的絕對值來判斷相關(guān)性的強(qiáng)弱。
-
即使R的絕對值低,也不一定說明變量間的相關(guān)性低,原因是相關(guān)性衡量的僅僅是變量間的線性相關(guān)關(guān)系,變量間除了線性關(guān)系外,還包括指數(shù)關(guān)系、多項(xiàng)式關(guān)系、冪關(guān)系等,這些“非線性相關(guān)”的相關(guān)性不在R(相關(guān)性分析)的衡量范圍之內(nèi)。
?
?
03 代碼實(shí)操:Python相關(guān)性分析
?
本示例中,將使用Numpy進(jìn)行相關(guān)性分析。源文件data5.txt位于“附件-chapter3”中。附件下載地址:
http://www.dataivy.cn/book/python_book_v2.zip
?
import?numpy?as?np??????????????????#?導(dǎo)入庫 data?=?np.loadtxt('data5.txt',?delimiter='\t')????#?讀取數(shù)據(jù)文件 x?=?data[:,?:-1]??????????????????????#?切分自變量 correlation_matrix?=?np.corrcoef(x,?rowvar=0)??????#?相關(guān)性分析 print(correlation_matrix.round(2))??????????#?打印輸出相關(guān)性結(jié)果?
?
示例中實(shí)現(xiàn)過程如下:
?
先導(dǎo)入Numpy庫;
使用Numpy的loadtxt方法讀取數(shù)據(jù)文件,數(shù)據(jù)文件以tab分隔;
矩陣切片,切分出自變量用來做相關(guān)性分析;
使用Numpy的corrcoef方法做相關(guān)性分析,通過參數(shù)rowvar = 0控制對列做分析;
打印輸出相關(guān)性矩陣,使用round方法保留2位小數(shù)。結(jié)果如下:
?
[[?1.???-0.04??0.27?-0.05??0.21?-0.05??0.19?-0.03?-0.02][-0.04??1.???-0.01??0.73?-0.01??0.62??0.????0.48??0.51][?0.27?-0.01??1.???-0.01??0.72??0.????0.65??0.01??0.02][-0.05??0.73?-0.01??1.????0.01??0.88??0.01??0.7???0.72][?0.21?-0.01??0.72??0.01??1.????0.02??0.91??0.03??0.03][-0.05??0.62??0.????0.88??0.02??1.????0.03??0.83??0.82][?0.19??0.????0.65??0.01??0.91??0.03??1.????0.03??0.03][-0.03??0.48??0.01??0.7???0.03??0.83??0.03??1.????0.71][-0.02??0.51??0.02??0.72??0.03??0.82??0.03??0.71??1.??]]?
?
相關(guān)性矩陣的左側(cè)和頂部都是相對的變量,從左到右、從上到下依次是列1到列9。從結(jié)果看出:
?
-
第5列和第7列相關(guān)性最高,系數(shù)達(dá)到0.91。
-
第4列和第6列相關(guān)性較高,系數(shù)達(dá)到0.88。
-
第8列和第6列相關(guān)性較高,系數(shù)達(dá)到0.83。
?
為了更好地展示相關(guān)性結(jié)果,我們可以配合Matplotlib展示圖像。代碼如下:
?
fig?=?plt.figure()??????????????????????#?調(diào)用figure創(chuàng)建一個繪圖對象 ax?=?fig.add_subplot(111)??????????????????#?設(shè)置1個子網(wǎng)格并添加子網(wǎng)格對象 hot_img?=?ax.matshow(np.abs(correlation_matrix),?vmin=0,?vmax=1)#?繪制熱力圖,值域從0到1 fig.colorbar(hot_img)??????????????????????#?為熱力圖生成顏色漸變條 ticks?=?np.arange(0,?9,?1)??????????????????#?生成0~9,步長為1 ax.set_xticks(ticks)??????????????????????#?生成x軸刻度 ax.set_yticks(ticks)??????????????????????#?設(shè)置y軸刻度 names?=?['x'?+?str(i)?for?i?in?range(x.shape[1])]????#?生成坐標(biāo)軸標(biāo)簽文字 ax.set_xticklabels(names)??????????????????#?生成x軸標(biāo)簽 ax.set_yticklabels(names)??????????#?生成y軸標(biāo)簽?
?
上述代碼的功能都已經(jīng)在注釋中注明。有以下幾點(diǎn)需要注意:
?
-
由于相關(guān)性結(jié)果中看的是絕對值的大小,因此需要對correlation_matrix做取絕對值操作,其對應(yīng)的值域會變?yōu)閇0, 1]。
-
原始數(shù)據(jù)中由于沒有列標(biāo)題,因此這里使用列表推導(dǎo)式生成從x0到x8代表原始的9個特征。
?
展示結(jié)果如圖所示。
?
?
從圖像中配合顏色可以看出:顏色越亮(彩色顏色為越黃),則相關(guān)性結(jié)果越高,因此從左上角到右下角呈現(xiàn)一條黃色斜線;而顏色較亮的第5列和第7列、第4列和第6列及第8列和第6列分別對應(yīng)x4和x6、x3和x5、x7和x5。
?
上述過程中,主要需要考慮的關(guān)鍵點(diǎn)是:如何理解相關(guān)性和因果關(guān)系的差異,以及如何應(yīng)用相關(guān)性。相關(guān)性分析除了可以用來分析不同變量間的相關(guān)伴生關(guān)系以外,也可以用來做多重共線性檢驗(yàn)。
?
代碼實(shí)操小結(jié):本節(jié)示例中,主要用了如下幾個知識點(diǎn)。
?
-
通過Numpy的loadtxt方法讀取文本數(shù)據(jù)文件,并指定分隔符;
-
對Numpy矩陣做切塊處理;
-
使用Numpy中的corrcoef做相關(guān)性分析;
-
使用round方法保留2位小數(shù);
-
使用np.abs取絕對值;
-
使用列表推導(dǎo)式生成新列表;
-
使用Matplotlib的熱力圖配合相關(guān)性結(jié)果做圖像展示。
?
關(guān)于作者:宋天龍,深大數(shù)據(jù)技術(shù)專家,觸脈咨詢合伙人兼副總裁,前Webtrekk中國區(qū)技術(shù)和咨詢負(fù)責(zé)人(德國最大在線數(shù)據(jù)分析服務(wù)提供商)。擅長數(shù)據(jù)挖掘、建模、分析與運(yùn)營,精通端到端數(shù)據(jù)價值場景設(shè)計(jì)、業(yè)務(wù)需求轉(zhuǎn)換、數(shù)據(jù)結(jié)構(gòu)梳理、數(shù)據(jù)建模與學(xué)習(xí)以及數(shù)據(jù)工程交付。在電子商務(wù)、零售、銀行、保險等多個行業(yè)擁有豐富的數(shù)據(jù)項(xiàng)目工作經(jīng)驗(yàn)。
?
本文摘編自《Python數(shù)據(jù)分析與數(shù)據(jù)化運(yùn)營》(第2版),經(jīng)出版方授權(quán)發(fā)布。
?
延伸閱讀《Python數(shù)據(jù)分析與數(shù)據(jù)化運(yùn)營》
(第2版)
點(diǎn)擊上圖了解及購買
轉(zhuǎn)載請聯(lián)系微信:DoctorData
?
推薦語:這是一本將數(shù)據(jù)分析技術(shù)與數(shù)據(jù)使用場景深度結(jié)合的著作,從實(shí)戰(zhàn)角度講解了如何利用Python進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)化運(yùn)營。本書與同類書大的不同在于,并不只有純粹的關(guān)于數(shù)據(jù)分析技術(shù)和工具的講解,而且還與數(shù)據(jù)使用場景深度結(jié)合,在業(yè)務(wù)上真正可指導(dǎo)落地。此外,本書作者提供微信、郵箱等,可通過實(shí)時和離線兩種方式及時為讀者在線傳道、受業(yè)、解惑。
?
?
「大數(shù)據(jù)」內(nèi)容合伙人之「鑒書小分隊(duì)」上線啦!
?
最近,你都在讀什么書?有哪些心得體會想要跟大家分享?
?
數(shù)據(jù)叔最近搞了個大事——聯(lián)合優(yōu)質(zhì)圖書出版商機(jī)械工業(yè)出版社華章公司發(fā)起鑒書活動。
?
簡單說就是:你可以免費(fèi)讀新書,你可以免費(fèi)讀新書的同時,順手碼一篇讀書筆記就行。詳情請?jiān)诖髷?shù)據(jù)公眾號后臺對話框回復(fù)合伙人查看。
?
?
有話要說??
Q:?你用哪些工具進(jìn)行相關(guān)性分析? 歡迎留言與大家分享?
猜你想看??
-
?
-
?
-
?
-
?
?
更多精彩??
在公眾號對話框輸入以下關(guān)鍵詞 查看更多優(yōu)質(zhì)內(nèi)容!?
PPT?|?報告?|?讀書?|?書單?|?干貨? 大數(shù)據(jù)?|?揭秘?|?Python?|?可視化 AI?|?人工智能?|?5G?|?中臺 機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?神經(jīng)網(wǎng)絡(luò) 合伙人?|?1024?|?段子?|?數(shù)學(xué)?
據(jù)統(tǒng)計(jì),99%的大咖都完成了這個神操作 ??
?
覺得不錯,請把這篇文章分享給你的朋友 轉(zhuǎn)載 / 投稿請聯(lián)系:baiyu@hzbook.com 更多精彩,請?jiān)诤笈_點(diǎn)擊“歷史文章”查看 點(diǎn)擊閱讀原文,了解更多總結(jié)
以上是生活随笔為你收集整理的相关和因果是一回事吗?R值低就是不相关?终于有人讲明白了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据大牛都在啃的10本书
- 下一篇: 普通码农和技术大牛之间,只差这10本书(