1 從超級(jí)紙片馬里奧說(shuō)起2007 年,任天堂的游戲機(jī) Wii 上推出了一款超級(jí)紙片馬里奧(super paper Mario)的游戲。在大多數(shù)操作中,它十分接近傳統(tǒng)的超級(jí)馬里奧,是一個(gè) 2D 的游戲,玩家控制馬里奧從左至右移動(dòng)闖關(guān),如下圖所示。 然而,這款游戲與前作的最大區(qū)別是它加入了橫向卷軸(side-scrolling)功能。這相當(dāng)于給玩家提供了全新的側(cè)視角機(jī)位(a side-view camera angle)。在這個(gè)側(cè)視角下,游戲一下從 2D 擴(kuò)展到 3D。比如上面那副游戲畫面的從側(cè)視角來(lái)看,就變成了下面這樣。在 2D 圖中看似在同一平面上的兩組磚塊兒在 3D 視角中竟然有著完全不同的軸向坐標(biāo)。 游戲的大部分都在 2D 中進(jìn)行。然而,在游戲中,馬里奧被賦予了“翻轉(zhuǎn)畫面”至 3D 的能力。通過(guò)這樣做,透視將發(fā)生移動(dòng)、且 2D 畫面發(fā)生旋轉(zhuǎn)并顯示出隱藏的 Z 軸,將馬里奧置于 3D 環(huán)境中。翻轉(zhuǎn)使玩家可以繞過(guò) 2D 中存在的障礙物,或者尋找僅在 Z 軸上才可見的物品和地形。 怎么樣,有沒有“事情的脈絡(luò)早已非常清晰,只是我們需要找到正確的視角”的感覺? 讓我們從這個(gè)游戲引申一步。上面的游戲畫面中,無(wú)論是馬里奧,還是磚塊兒或者其他游戲元素,構(gòu)成它們的是屏幕上不同配色的像素,在計(jì)算機(jī)看來(lái)它們無(wú)非是大量的數(shù)據(jù)。這些數(shù)據(jù)在 2D 視角下呈現(xiàn)出一些模糊的結(jié)構(gòu),而“翻轉(zhuǎn)到 3D”使這個(gè)模糊的結(jié)構(gòu)從一個(gè)全新的角度清晰地展現(xiàn)到我們面前,我們可以從中發(fā)現(xiàn)很多之前看不到的信息。 對(duì)于一組多變量的數(shù)據(jù),通過(guò)轉(zhuǎn)換觀察數(shù)據(jù)的角度,揭示出數(shù)據(jù)內(nèi)在的結(jié)構(gòu),這個(gè)過(guò)程就叫做主成分分析(principal component analysis,PCA)。主成分分析作為基礎(chǔ)的數(shù)學(xué)分析方法,其實(shí)際應(yīng)用十分廣泛,比如人口統(tǒng)計(jì)學(xué)、分子動(dòng)力學(xué)、數(shù)學(xué)建模、數(shù)理分析、以及量化投資等學(xué)科中均有應(yīng)用,它是一種常用的多變量分析方法。 2 直觀理解 PCA在用統(tǒng)計(jì)方法分析多變量的數(shù)據(jù)集時(shí),變量太多會(huì)大大增加問(wèn)題的復(fù)雜性。此外,在很多問(wèn)題中,變量之間普遍存在一定的線性相關(guān)性,這就造成了被不同變量所代表的數(shù)據(jù)信息有重疊。面對(duì)這些問(wèn)題,一個(gè)自然的想法是“能否使用較少的但是沒有相關(guān)性的變量來(lái)獲取盡可能多的原始數(shù)據(jù)的信息?”。由此便提出了主成分分析(PCA)。 PCA 從原始變量出發(fā),通過(guò)旋轉(zhuǎn)變化(即原始變量的線性組合)構(gòu)建出一組新的、互不相關(guān)的新變量,這些變量盡可能多的解釋原始數(shù)據(jù)之間的差異性(即數(shù)據(jù)內(nèi)在的結(jié)構(gòu)),它們就稱為原始數(shù)據(jù)的主成分。由于這些變量不相關(guān),因此它們無(wú)重疊的各自解釋一部分差異性。依照每個(gè)變量解釋的差異性大小排序,它們稱為第一主成分、第二主成分、以此類推。 來(lái)看一個(gè)生動(dòng)的例子。 下面的動(dòng)態(tài)圖展現(xiàn)了一組三維空間內(nèi)看似雜亂無(wú)章的原始數(shù)據(jù)(看不出差異性)經(jīng)過(guò) PCA 變換后在新的變量(即圖中的坐標(biāo)軸)視角下呈現(xiàn)的圖案。當(dāng)我們用新的變量(坐標(biāo)軸)來(lái)繪制這些數(shù)據(jù)時(shí),它們所傳達(dá)的信息就更加清晰的呈現(xiàn)出來(lái)(由于數(shù)據(jù)點(diǎn)的差異性被體現(xiàn)出來(lái),一團(tuán)看似無(wú)序的散點(diǎn)變成了一只企鵝圖案?。?。這就是 PCA 的魅力。 下面就來(lái)看看 PCA 的數(shù)學(xué)含義。 3 數(shù)學(xué)含義——認(rèn)清去均值化的重要性PCA 在數(shù)學(xué)上定義為一個(gè)正交線性變換(orthogonal linear transformation),將原始數(shù)據(jù)轉(zhuǎn)換到一個(gè)新的坐標(biāo)系統(tǒng),該系統(tǒng)中的坐標(biāo)稱為主成分(principal components),它們相互正交,因此是不相關(guān)的。如果我們將原始數(shù)據(jù)投影到這些主成分上,它們滿足以下條件:
以此類推。 這些主成分構(gòu)成了一組不相關(guān)的正交基集,每個(gè)主成分解釋了原始數(shù)據(jù)中的一部分差異性(由投影數(shù)據(jù)的方差表示);從第一主成分開始,解釋差異性的多少依次遞減。換句話說(shuō),如果我們想找到一個(gè)“視角”來(lái)觀察這些數(shù)據(jù),使得它們看起來(lái)差別最明顯(比從任何其他角度看這些數(shù)據(jù)的差別都明顯),那么這個(gè)“視角”就是第一主成分。 PCA 是一種降維(dimension reduction)分析方法;主成分的個(gè)數(shù)應(yīng)小于或等于原始變量個(gè)數(shù)以及觀測(cè)值的個(gè)數(shù)。因此 PCA 能夠使用低維度的正交變量來(lái)解釋高維度(原始變量)的數(shù)據(jù)信息——我們將高維度的原始數(shù)據(jù)投影到低維度的 PCA 主成分中。 下面簡(jiǎn)單說(shuō)說(shuō)如何從數(shù)學(xué)上求解主成分,從而引出 PCA 中一個(gè)非常關(guān)鍵的概念——去均值化(demean)。 假設(shè) X 代表一個(gè) n × p 的矩陣,每一行代表一個(gè)觀測(cè)值(因此一共有 n 個(gè)觀測(cè)值),每一列代表一個(gè)變量維度(因此有 p 個(gè)原始變量)。此外,在求解主成分前已經(jīng)對(duì)原始數(shù)據(jù)中的每個(gè)維度都進(jìn)行了去均值化,即 X 的每個(gè)列向量中的樣本數(shù)據(jù)的均值都為 0。去均值化對(duì)于 PCA 的分析結(jié)果是否正確至關(guān)重要。至于為什么,請(qǐng)接著往下看。 我們首先來(lái)求解第一主成分。它是原始 p 個(gè)維度的線性組合。定義列向量 w_(1) 如下,它代表第一主成分中這 p 個(gè)維度的權(quán)重: 其中帶括號(hào)的下標(biāo) (1) 表示第一主成分,此外 w_(1) 的范數(shù)等于 1。X 中的每一行 x_i 為一個(gè)去均值化后的原始數(shù)據(jù)(它是一個(gè) 1×p 的行向量),因此它在第一主成分上的投影相當(dāng)于 x_i 與 w_(1) 的內(nèi)積。它是一個(gè)標(biāo)量,它又稱為主成分得分(principal component score)。原始數(shù)據(jù) x_i 在第一主成分上的投影,記為 t_i(1),為: 對(duì)于所有的原始數(shù)據(jù) x_i 求出它們?cè)诘谝恢鞒煞稚系耐队?t_i(1),下面要做的就是使這些投影點(diǎn)的方差最大。方差如何定義呢?方差是否等于所有 t_i(1) 的平方和呢? 在第一主成分對(duì)應(yīng)的坐標(biāo)軸上,t_i(1) 代表著原始數(shù)據(jù) x_i 的投影點(diǎn)到該坐標(biāo)系原點(diǎn)的距離。因此所有 t_i(1) 的平方和的數(shù)學(xué)含義是所有這些投影點(diǎn)到原點(diǎn)的距離的平方和(sum of squared deviation from origin)。 注意,重要的事情說(shuō)三遍:
來(lái)看一個(gè)例子。假設(shè)二維空間中有兩個(gè)變量 v1 和 v2,以及它們的一組觀測(cè)值(如下圖左側(cè)的情況所示)。如果在進(jìn)行 PCA 時(shí)未進(jìn)行去均值化,則得到的第一主成分是一條通過(guò)原點(diǎn)的 45 度的直線。然而,即便是通過(guò)肉眼觀測(cè)我們也可以發(fā)現(xiàn)原始數(shù)據(jù)的方差在這個(gè)方向上并不是最大的。因此,這個(gè)第一主成分是錯(cuò)誤的。 之所以會(huì)發(fā)生這樣的情況,是因?yàn)?PCA 是一種旋轉(zhuǎn)變換,因此得到的新的由主成分構(gòu)成的坐標(biāo)系必然要經(jīng)過(guò)原始坐標(biāo)系的原點(diǎn)。在這個(gè)例子中,原始觀測(cè)點(diǎn)聚集在坐標(biāo) (4, 4) 附近。如果不去均值化,坐標(biāo)系統(tǒng)將圍繞著原始坐標(biāo)系中的點(diǎn) (0, 0) 旋轉(zhuǎn)。在這種情況下,在計(jì)算投影點(diǎn)到原點(diǎn)的距離平方和時(shí),原點(diǎn)正是 (0, 0)。圖中 45 度斜線上方密密麻麻的黑點(diǎn)為原始數(shù)據(jù)的投影點(diǎn),它們圍繞在 (4, 4) 附近。由于沒有去均值化,在計(jì)算距離平方和時(shí),(0, 0) 到 (4, 4) 之間的距離的平方將被錯(cuò)誤地算作投影點(diǎn)自身方差的一部分,使得投影點(diǎn)的方差在 45 度斜線這個(gè)方向上顯得最大,因此這個(gè)方向被錯(cuò)誤地選為第一主成分。 正確的做法是對(duì)原始數(shù)據(jù)去均值化。這樣,原點(diǎn)被移動(dòng)到原始數(shù)據(jù)的中心(如上圖中右側(cè)的情況)。圍繞著新的原點(diǎn)進(jìn)行 PCA 便可以正確的發(fā)現(xiàn)真正的第一主成分,即穿過(guò)新原點(diǎn)的 135 度直線方向。由于已經(jīng)移動(dòng)了原點(diǎn),因此投影點(diǎn)到原點(diǎn)的距離平方和就正比于投影點(diǎn)的方差。從上圖也不難看出,在該方向上的投影點(diǎn)的距離平方和最大,即方差最大。這就是為什么在進(jìn)行 PCA 之前要對(duì)原始數(shù)據(jù)去均值化。 在去均值化的前提下,“最大化投影點(diǎn)在第一主成分上的方差”等價(jià)于“找到 w_(1)使t_i(1)的平方和最大”。這就意味著,第一主成分的權(quán)重 w_(1) 是下面這個(gè)最優(yōu)化問(wèn)題的解: 將上式右側(cè)寫成矩陣形式為: 可以證明,上式右側(cè)中的優(yōu)化函數(shù)的最大值為對(duì)稱矩陣 (X^T)X 的最大特征值(the largest eigenvalue),該值當(dāng) w 取為這個(gè)特征值對(duì)應(yīng)的特征向量(eigenvector)時(shí)實(shí)現(xiàn)。這里先埋個(gè)伏筆,看完下一節(jié)你就知道這里為什么特意引出對(duì)稱矩陣 (X^T)X,以及它的特征向量和特征值。 求出 w_(1) 之后,便找到了第一主成分。原始數(shù)據(jù)在第一主成分上的投影就是 t_i(1)。確定了第一主成分后,便可以依次確定第二、第三主成分,以此類推。具體的,假設(shè)已經(jīng)確定了前 k - 1 個(gè)主成分(k ≥ 2),為了確定第 k 個(gè)主成分,只需要從原始數(shù)據(jù) X 中減去前 k - 1 個(gè)主成分,然后對(duì)剩余的新的數(shù)據(jù)進(jìn)行投影點(diǎn)到原點(diǎn)距離平方和最大化的求解,從而得到第 k 個(gè)主成分的權(quán)重向量 w_(k)。 這種方法聽起來(lái)比較繁瑣,因?yàn)橐ㄟ^(guò)迭代依次找到主成分。但我的目的是想通過(guò)對(duì)數(shù)學(xué)步驟的描述強(qiáng)調(diào)去均值化的重要性。在實(shí)際應(yīng)用時(shí),PCA 可以通過(guò)對(duì)原始 n × p 維的數(shù)據(jù) X進(jìn)行協(xié)方差矩陣的特征分解求得。 4 對(duì)協(xié)方差矩陣進(jìn)行特征值分解在上節(jié)的數(shù)學(xué)推導(dǎo)中曾留下一個(gè)伏筆:求解去均值化后的數(shù)據(jù) X 的第一主成分等價(jià)于求解對(duì)稱矩陣 (X^T)X 的最大特征值對(duì)應(yīng)的特征向量。事實(shí)上,求解 X 的前 k 個(gè)主成分就相當(dāng)于求解對(duì)稱矩陣 (X^T)X 的最大的 k 個(gè)特征值各自對(duì)應(yīng)的特征向量。它們就是 X 的 k 個(gè)主成分。 再來(lái)看看 (X^T)X 是什么。去均值化后,對(duì)稱矩陣 (X^T)X 正比于 X 的協(xié)方差矩陣。事實(shí)上,X 的協(xié)方差矩陣正是 Cov(X) = (X^T)X / (n-1)。注意:如果未對(duì) X 進(jìn)行去均值化,則 Cov(X) 不等于 (X^T)X / (n-1)。 根據(jù)上面的論述,我們只需首先對(duì)原始數(shù)據(jù)去均值化并求出它的協(xié)方差矩陣;在得到協(xié)方差矩陣后,對(duì)該矩陣進(jìn)行特征值分解(eigen-decomposition)得到特征值和特征向量;之后,將特征值從大到小排序,取前 k 個(gè)特征值對(duì)應(yīng)的特征向量,它們就是我們要找的 k 個(gè)主成分。 根據(jù)協(xié)方差的定義,計(jì)算協(xié)方差的過(guò)程中便已對(duì)數(shù)據(jù)進(jìn)行了去均值化,因此對(duì)于求解代表主成分的特征向量,并不需要在求協(xié)方差均值之前人工對(duì)數(shù)據(jù)去均值化。然而,考慮到 PCA 是旋轉(zhuǎn)變換且坐標(biāo)系統(tǒng)的原點(diǎn)應(yīng)該位于多變量數(shù)據(jù)的多維均值之上,因此在計(jì)算原始數(shù)據(jù)點(diǎn)在主成分上的投影時(shí),仍應(yīng)將數(shù)據(jù)進(jìn)行去均值化處理。此外,除了本節(jié)介紹的協(xié)方差矩陣的特征值分解外,還有其他求解 PCA 的方法,比如 Python 的 sklearn 統(tǒng)計(jì)包使用的是對(duì)矩陣 X 直接進(jìn)行奇異值分解(singular value decomposition,SVD)。在采用這種解法時(shí),如果沒有人工對(duì)數(shù)據(jù)去均值,那么SVD的計(jì)算結(jié)果便有可能是錯(cuò)誤的。因此,在進(jìn)行 PCA 時(shí),無(wú)論是用什么方法,首先應(yīng)對(duì)數(shù)據(jù)去均值化。 下面通過(guò)一個(gè)例子來(lái)說(shuō)明對(duì)協(xié)方差矩陣進(jìn)行特征值分解的過(guò)程。 假設(shè)有兩個(gè)變量 A 和 B 的 10 個(gè)觀測(cè)點(diǎn),如下表所示。我們希望找出它們的第一主成分。 第一步:去均值,得到去均值化后的數(shù)據(jù) 第二步:計(jì)算協(xié)方差矩陣 去均值化后數(shù)據(jù)的協(xié)方差矩陣為: 第三步:對(duì)協(xié)方差矩陣進(jìn)行特征值分解 得到特征值為 0.07650136 和 1.36494309。二者中較大特征值對(duì)應(yīng)的特征向量為:[-0.68212146, -0.73123889]^T,這就是數(shù)據(jù)的第一主成分。 第四步:計(jì)算原始數(shù)據(jù)在第一主成分上的投影 用去均值后的數(shù)據(jù)和第一主成分內(nèi)積,便得到原始數(shù)據(jù)在第一主成分上的投影。為了驗(yàn)證結(jié)果的正確性,我們同時(shí)采用 Python 的 sklearn 包自帶的 PCA 計(jì)算第一主成分。從下表的結(jié)果可以看到,上述計(jì)算和使用軟件包的計(jì)算結(jié)果是一致的。 來(lái)看看第一主成分在二維平面上是什么方向的。下圖中,藍(lán)色的圓圈是原始去均值化后的數(shù)據(jù),綠色的直線是第一主成分的坐標(biāo)軸。紅色的方塊是原始數(shù)據(jù)在其上的投影。不難看出,在第一主成分上,投影點(diǎn)的方差最大。如果我們把這 10 個(gè)點(diǎn)投影到非第一主成分的其他方向上,那些投影點(diǎn)的方差都沒有第一主成分上這些投影點(diǎn)的方差大。即第一主成分是最能夠體現(xiàn)這些點(diǎn)之間差異化的那個(gè)視角。 5 尺度縮放的重要性最后——last but not least——想指出的一點(diǎn)是,PCA 對(duì)原始變量的相對(duì)尺度十分敏感。如果在一組變量中,某一個(gè)變量的量綱非常大,那么這個(gè)變量很可能主宰觀測(cè)數(shù)據(jù)的方差,導(dǎo)致第一主成分非常接近這個(gè)變量,而這樣的結(jié)果往往沒有太大的意義。 比如在一個(gè)問(wèn)題中,某一個(gè)變量是長(zhǎng)度,如果我們把它的單位從米改成厘米,則數(shù)量級(jí)大了 100 倍,計(jì)算方差的時(shí)候該變量方差的數(shù)量級(jí)則大了 10000 倍。然而量綱的變化對(duì)于數(shù)據(jù)本身的內(nèi)部結(jié)構(gòu)并沒有改變,但我們會(huì)因此錯(cuò)誤的認(rèn)為長(zhǎng)度這個(gè)變量是一個(gè)解釋方差的最重要因素,這就有問(wèn)題了。 因此,在進(jìn)行 PCA 時(shí),往往有必要結(jié)合數(shù)據(jù)的業(yè)務(wù)含義對(duì)變量進(jìn)行尺度縮放(scaling),使得不同變量之間在量綱上具有可比性。需要強(qiáng)調(diào)的是,在 scaling 的技巧中并沒有標(biāo)準(zhǔn)答案,因此需要具體問(wèn)題具體分析。 下面這兩個(gè)示例圖展示了是否 scaling 對(duì) PCA 結(jié)果的影響。上圖中,由于沒有 scaling,導(dǎo)致得到的第一主成分完全秒殺了其他主成分,這樣會(huì)使使用者認(rèn)為數(shù)據(jù)之間的區(qū)別僅僅存在于第一主成分中。而經(jīng)過(guò)適當(dāng)?shù)?scaling 后(下圖),PCA 的結(jié)果更加合理,前四個(gè)主成分依次解釋了數(shù)據(jù)中的方差。 6 結(jié)語(yǔ),PCA 與量化投資 在分析多變量數(shù)據(jù)時(shí),變量之間錯(cuò)綜復(fù)雜的相關(guān)性往往為我們探究其內(nèi)部的結(jié)構(gòu)設(shè)置了層層障礙。而不同變量之間傳遞的帶有重疊性的信息更會(huì)使我們錯(cuò)誤的高估一些變量的作用。 放眼量化投資領(lǐng)域,多因子量化選股無(wú)疑是一個(gè)可以使用 PCA 來(lái)分析的課題。人們主觀的將因子歸納為估值因子、質(zhì)量因子、成長(zhǎng)因子、動(dòng)量因子等,就是希望降低不同類別因子之間的相關(guān)性,使它們各自代表股票超額收益中不同的風(fēng)險(xiǎn)敞口。然而,由于這些因子都是來(lái)自市場(chǎng)交易數(shù)據(jù)以及公司財(cái)報(bào),它們之間一定存在著千絲萬(wàn)縷的聯(lián)系(即相關(guān)性)。如果我們想要徹底排除因子之間的相關(guān)性、降低分析問(wèn)題的復(fù)雜性、同時(shí)捕捉到股票在不同因子之上的差異,PCA 無(wú)疑會(huì)有用武之地。它可以把傳統(tǒng)的因子轉(zhuǎn)化為一組完全正交的主成分,這有助于提高量化選股的準(zhǔn)確性。 |
|
來(lái)自: 東西二王 > 《數(shù)據(jù)分析》