# 【如何啟動你的大數據分析案?】 <style> /* 自定義 highlight 樣式 */ .highlight { background: linear-gradient(to top, lightblue 50%, transparent 50%); font-weight: bold; } </style> ## 目錄 **AI是百分百客製化問題,沒有題目就不知道怎麼分析。** - Part1: 導讀故事 - Part2: 大數據分析問題類型 I - 分類、分群 - Part3: 大數據分析問題類型 II - 迴歸、時序預測 - Part4: 大數據分析問題類型 III - 最佳化問題 - Part5: 常見效果好壞評估方式 <br><br> ## Part1: 導讀故事 #### 範例: 鞋廠檢測鞋子的好壞情形 1. 純粹判斷鞋子是好的還是壞的,而後由人工再次檢查。 (<span class = "highlight"> 分類問題 </span> ) 2. 判斷鞋子是壞的機率,高於某個機率的由人工再次檢查。 (<span class = "highlight"> 迴歸問題 </span> ) 3. 判斷鞋子是壞的後,追加判斷是發生什麼問題,人工不需檢查,僅需要依電腦判斷對鞋子做後續處理。 4. 判斷鞋子是壞的後,追加判斷鞋子出問題的地方在哪裡,人工可直接找到鞋子壞掉地方做處理,公司最省時省力。 <br> :::success **重點筆記**:**題目的定義** - 同一個議題可以有很多種分析定義 - 不同的題目定義會影響分析的困難程度 - 題目定義後,隨便更改可能會出事情 - 題目定義更改後,就需要針對問題去更改實作方法 <center> <table> <tr> <th>資料類型、處理方式</th> <th>離散資料</th> <th>時序資料</th> <th>影像資料</th> <th>時空資料</th> <th>文字資料</th> </tr> <tr> <td>降維</td> <td>LDA、PCA、t-SNE</td> <td>FNN</td> <td>Pooling</td> <td>MLP</td> <td>-</td> </tr> <tr> <td>分群</td> <td>K-means、DBSCAN</td> <td>K-medoids、K-means</td> <td>-</td> <td>DBSCAN</td> <td>LDA</td> </tr> <tr> <td>分類</td> <td colspan="5">KNN、Decision Tree、Random Forest、Hierachical Classification、NN</td> </tr> <tr> <td>建模</td> <td>DNN</td> <td>RNN、LSTM</td> <td>-</td> <td>CNN + LSTM</td> <td>-</td> </tr> </table> </center> ::: #### 解題目標 - **降維**:大數據分析收集了很多維度資料,我們透過電腦與歷史資料集找出其中對分析最有用的幾個維度。 - **分類**:已知類別便是新資料點屬於哪類。 - **分群**:將一群資料依照各種定義把相鄰的分一群。 - **迴歸**:已知一組輸入輸出 $(X_1, X_2, ..., X_n), (y_1, y_2, ..., y_n)$ 找出一個 $f()$ 函數使得 $(y_1, y_2, ..., y_n) = f(X_1, X_2, ..., X_n)$ - **時序分析**:已知一個時間序列 $(X_1, X_2, ..., X_t)$ 試著找出一個 $f()$ 函數使得 $X_{t+k} = f(x_{t}, x_{t-1}, ..., x_{t-h})$ - **最佳化類**:已知一個系統和可操縱該系統的變數 $x_1, x_2, ..., x_n$,假設該系統的控制目標為 $y_1, y_2, ..., y_m$ 求一組 $x_1, x_2, ..., x_n$ 使得 $y_1, y_2, ..., y_m$ 為最佳。 <br> ## 降維 #### **Concept**:a, b, c, ..., h - **Keep**:a, b, c, j will be keep - **Select**:a, b, j will be select ![image](https://hackmd.io/_uploads/ryP3vESnkx.png) #### **維度太多會怎樣** **\# of suitable dimensions too much:** 1. 效果優良 2. 效果不好: - Maybe some contradiction data - Model size will be increased **\# of suitable dimensions too less:** 1. 效果不好: ![image](https://hackmd.io/_uploads/BJ2xaVr3ye.png) :::success **重點筆記**: **How nn deals the unrelated dimension** ![image](https://hackmd.io/_uploads/SysKZ8rnke.png) ::: #### Goal to achieve - Dimentsion reduction before Class & Clustering (Let the data points spread more widely) ![image](https://hackmd.io/_uploads/rygA7Lrn1g.png) - Dimension reduction before Regression, prediction (Let the data be line up) ![image](https://hackmd.io/_uploads/BySA4LBhkx.png) - 降維效能的評估:我們無法得知降到幾維最佳,因此評估的方法為尋找肘點(所以所有維度都要測) 1. 質化;視覺化降維結果。 2. 量化:分散度,群聚性,分類準確度。 ![image](https://hackmd.io/_uploads/ByMVuUHhkg.png) :::success **重點筆記**:**肘點(Elbow Point)** 肘點又可以稱作 Trade-off Point, is a very important evaluation method we cannot decide the best value for the performance method (Dimension Reduction & Clustering) ::: #### Feature Selection & Feature Extraction 1. 原始資料:Origin A, B, C, D, E, …., Z 3. Feature Selection:A, C, E, Z ![image](https://hackmd.io/_uploads/HyrcKLB21l.png) 3. Feature Extraction:$0.8A + 0.1B + 0.1C + 0.5E + 0.7Z$ - PCA:資料分佈越散開越好 ![截圖 2025-03-17 晚上9.47.34](https://hackmd.io/_uploads/H1GWOoBhkx.png) - LDA - Dedicated to classification ![截圖 2025-03-17 下午4.13.22](https://hackmd.io/_uploads/rJaoYIShyx.png) - PCA v.s LDA 4. **Real Example**- Increasing MNIST Recognition Performance Using Dimensionality Reduction - Original ![截圖 2025-03-17 晚上9.50.20](https://hackmd.io/_uploads/By9i_jHhke.png) - PCA ![截圖 2025-03-17 晚上9.50.51](https://hackmd.io/_uploads/H1vTOiShJx.png) - LDA ![截圖 2025-03-17 晚上9.51.19](https://hackmd.io/_uploads/Sk71KjHhkl.png) - t-SNE ![截圖 2025-03-17 晚上9.52.03](https://hackmd.io/_uploads/H1AZYsHhke.png) <br><br> ## Part2: 大數據分析問題類型 I - 分類、分群 <center> <img src="https://hackmd.io/_uploads/H1U8b6FpA.png", style=" width: 90%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> 5. 補充資料 - ISOMAP:Try to keep the distance between two the same points. - PCA、LDA、t-SNE:Distnace between twos points will be changed. :::success 1. 局部鄰接圖:先用 k 最近鄰 或 ε-鄰域 建立資料點的鄰接圖,只保留「真正相鄰」的邊,避免高維空間中被折疊的捷徑。 2. 估計流形上的「測地距離」 把鄰接圖的邊權設為歐氏距離,對任意兩點以 Dijkstra / Floyd–Warshall 求最短路徑長度,近似它們在低維流形上的測地距離 $d_{ij}^{geo}$。 多維尺度分析(MDS)嵌入 對整張測地距離矩陣做 Classical MDS,在目標維度 𝑑 ≪ 𝐷 d≪D 中尋找座標,使得歐氏距離盡量還原 $d_{ij}^{geo}$ ;結果即為保持非線性結構的低維表示。 > 一句話:ISOMAP 用鄰接圖+最短路徑把「彎曲」高維資料展平成測地距離,再用 MDS 投影,從而保留流形的真實幾何。 ::: 6. 資料中隱含的資訊與資訊損失 - 大數據分析:把所有的資料交給電腦,讓它自己找出規律。 - 降維(Dimensional Reduction):在簡化資料的過程中,通常會有一些資訊被犧牲掉,這就是所謂的資訊損失。 - 大數據分析 vs 降維技術:關鍵在於,我們該保留哪些資訊、又該捨棄哪些資訊? - 舉例說明: 1. 例1:利用一群人的身高、體重等特徵,來判斷他們的年級。 2. 例2:根據兩人之間通話或互動的頻率,來分析他們是否屬於同一群學生。 7. 時間序列中的降維問題(Dimensional Reduction in Time Series) **核心想法:** - 我們的目標是要找出「真正影響某個特定時間點」的關鍵時刻。 - 舉例: 假設你關心的是「星期一早上 08:00 的 Youbike 使用量」,理論上,大數據分析會希望我們輸入**整週共 168 小時(7 天 × 24 小時)**的資料來做判斷。 **但實際上:** - 真正影響「星期一早上 08:00」的,可能只有幾個特定時間點,例如: - 前一天晚上 11 點(Sunday 23:00) - 當天早上 6:00、7:00(Monday 06:00、07:00) 所以,在進行時間序列的降維時,我們應該聚焦在這些「關鍵時間點」的資訊,而不是無差別使用整段時間的資料。 **大數據分析 vs 時間序列降維** - 大數據分析(Big Data Analysis):什麼資料都給電腦,168 小時一併處理。 - 時間序列降維(Dimensional Reduction of Time Series):找出幾個「有代表性」或「有影響力」的時間點,把沒用的時間點剃除掉,以減少運算負擔與資訊干擾。 8. 方法比較:PCA/LDA/t-SNE vs ISOMAP | 方法 | 自身資訊(Self Information) | 距離資訊(Distance Information) | | --------------- | ---------------------- | -------------------------- | | PCA, LDA, t-SNE | ✅ | ❌ | | ISOMAP | ❌ | ✅ | - PCA/LDA/t-SNE:會改變資料間的距離結構,但能保留個別資料點的特徵。 - ISOMAP:嘗試維持資料點間的距離不變,強調「資料之間的相對關係」。 9. 如何用 LSTM 和 DNN 做時間序列的降維? **近幾年的趨勢:** - 學術界常用 LSTM(長短期記憶網路) 與 DNN(深度神經網路) 來進行時間序列的降維,幫助模型抓出對預測最有影響力的時間點。 **DNN 是怎麼做的?** - 假設你有一週 168 小時的資料($v(t-1), v(t-2), ..., v(t-168)$),每個時間點都有對應的特徵。 - DNN 會透過模型自動學習「哪些時間點是關鍵的」,而非平等看待所有輸入。 - 例如:模型可能發現只有 $v(t-1)$, $v(t-2)$, $v(t-3)$ 對結果有影響,其餘像 $v(t-168)$ 其實不重要。 **那 LSTM 又是怎麼做的?** - LSTM 的結構設計中有一個很重要的元件叫 forget gate(遺忘閘)。 - 它能根據上下文自動決定「是否該保留過去某個時間點的資訊」。 - 這樣一來,LSTM 就能自動濾掉不重要的時間點資訊,只保留對預測有幫助的部分。 **總結流程** - dir(原始資料) → C(選出重要時間點)→ model(餵給模型訓練) - 這個概念就是典型的 時間序列降維流程:只挑對模型最有幫助的時間點進行訓練,減少噪音與計算量。 :::success **請解釋在「8」這個數字的手寫預測中,類神經網路為何需要加上recurrent才能完成預測** - 只有當「8」以時間序列筆畫呈現時,模型才需要 recurrent 來累積前後筆畫關係、判斷兩個環是否都閉合;若輸入已是完整影像,CNN 等前饋網路即可完成辨識。 ::: ![image](https://hackmd.io/_uploads/BJ3fiFxXgl.png) ### 分類問題 - **介紹:** 已知東西的類別,判斷新進東西所屬的類別。具有標準答案。 - **分類問題的判斷標準:** Confusion Matrix(混淆矩陣) <center> <img src="https://hackmd.io/_uploads/BJygSX5oR.png", style=" width: 50%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> 1. Confusion Matrix 範例 I <center> <img src="https://hackmd.io/_uploads/HyM_T7cjC.png", style=" width: 1000%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> 2. Confusion Matrix 範例 II <center> | 試紙A | 有癌症 | 沒有癌症 | 辨識率 | | :--: | :--: | :--: | :--: | | 有癌症 | 80 | 20 | 80% | | 沒有癌症 | 20 | 80 | 80% | | 辨識率 | 80% | 80% | 80% | | 試紙B | 有癌症 | 沒有癌症 | 辨識率 | | :--: | :--: | :--: | :--: | | 有癌症 | 100 | 40 | 71% | | 沒有癌症 | 0 | 60 | 100% | | 辨識率 | 100% | 60% | 80% | </center> :::success **重點筆記** : 試紙 B 的效果更加優異,因為具有癌症的患者能被百分百辨識。 ::: <br> - **常見的案例:** 1. 把全班同學分成男生女生 2. 把本批次產品分成良品與不良品 3. 把修本門課的同學分成及格與不及格 <br> ### 分群問題 - **介紹:** 不知東西的類別,把相似者方在同一群。沒有標準答案。 - **分群問題的好壞評估方式:** 有沒有指定分群數量? 1. 如果有,討論同群資料點是否有群聚 2. 如果沒有,討論不同數量下的輪廓係數 - **分群問題的判斷標準**: 內部距離最小化,外部距離最大化 (使用重心找距離)(Silhouette Coefficient) 1. 不同數量下輪廓係數 (2種),找<span class = "highlight"> 肘點(最佳解) </span> : 在效果與運算成本的折衷。 <center> <img src="https://hackmd.io/_uploads/rksYlV9oR.png", style=" width: 70%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> 2. **常見的作法:** Random forest ```mermaid graph LR; A[Step1:\n資料處理]-->B[Step2:\n特徵值標準化]-->C[Step3:\nk-means\n進行資料標記]-->D[Step4:\n利用標記結果與\n隨機森林分類]-->E[Step5:\n由訓練後隨機森林\n做因子重要度的探討] style A fill:#fff,stroke:#333,stroke-width:2px; style B fill:#fff,stroke:#333,stroke-width:2px; style C fill:#fff,stroke:#333,stroke-width:2px; style D fill:#fff,stroke:#333,stroke-width:2px; style E fill:#fff,stroke:#333,stroke-width:2px; ``` :::success **重點筆記**: - Step3: 進行分群。 - Step4, 5: 探討不同群的成因,又稱做可解釋化 AI。 (建立 AI 模型後,探討模型的參數來了解成因。模型常使用常見於隨機森林、類神經) ::: - **常見的案例:** 1. 把全班同學依出身地分成四群 2. 把全班同學依個性分成多群活動 3. 把產品中的不良品分成多群,並討論每群原因 (資料科學最常討論的方法) <br><br> ## Part3: 大數據分析問題類型 II - 迴歸、時序預測 ### 迴歸問題 - **常見的案例:** 1. 學生在課堂上滑手機次數與最終成績關係 2. 學生待在圖書館時間與最後畢業分數 3. 網站上景點介紹頁面點擊次數與參訪人次 <br> ### 時序預測問題 **時間序列預測的挑戰與限制(Some Issues in Time Series Prediction)** 1. 並非所有時間序列都能進行預測 - 「我們能預測所有的時間序列嗎?」答案是不行。 - 時間序列預測的前提是:過去的資料與現在之間存在可學習的關聯。 - 然而,並非所有時間序列都有這種可預測性(Predictability),有些序列本身是隨機或劇烈變動的。 2. 預測前需確認資料是否只受時間影響: 若資料受其他外部因子強烈影響(如政策、天氣、事件),即使有時間變化也難以預測。 3. 範例一:醫療耗材問題 - 醫療耗材的「消耗量」:有規律性,可依過往需求趨勢做預測。 - 醫療耗材的「存量」:可能受進貨政策、人為決策影響,不具備明確時間關聯。 4. 範例二:以股市為例: - 有川普的世界不可預測(充滿政策與突發性波動) - 沒有川普的世界相對可預測(穩定性較高) - **時序的攤平:** 傳統 RNN 會有過久資料不見的問屜 (太久以前資料無法影響目前結果),雖然網路無法記憶過去的資訊,但可以確定過去有用的資料被納入建模 <center> <img src="https://hackmd.io/_uploads/SkeoINqjA.png", style=" width: 90%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> - **時序預測的重點:** 1. 每個時間點之間資料必須要有相關性,做時序預測時必然得確保妳的預測對象受到前面時間影響。 2. 可以預測:外力影響小、不可預測:常有外力影響。 3. 人類行為不一定每次都能分析。(**例如連鎖超市臨時推送「30 分鐘和牛買一送一」快閃優惠,社群裂變瞬間引爆 4 倍客流、使依歷史數據建立的需求預測全面失準,凸顯人類行為的突發性往往超出模型可分析範圍。**) - **常見的案例:** 1. 前小時25度,目前26度,請問未來一小時溫度 2. 由昨天今天氣溫預測明天台大醫院急診人數 3. 由前一小時下古坑交流道人數預測劍湖山人數 <br> ### 什麼是 Spatio-temporal Data 空間時間資料通常包含以下三種類型: - 時間序列資料:像是 Google Trend、股價、氣溫變化等。 - 矩陣型資料:例如地圖上的數據分布(spatial data)、熱力圖等。 - 離散型資料:例如「今天是不是假日?」這類是/否問題。 **🧠 深度學習前的資料處理流程:** - 在早期(還沒有深度學習的時候),我們的做法是: ```scss= 特徵擷取 (feature extraction) ↓ 降維 (dimensionality reduction) ↓ 建模 (modeling) ``` - 每種資料型態(時間序列、矩陣、離散) 都需要個別使用不同方法(方法 A、B、C)來萃取重要特徵(key features)。 - 然後再把這些不同來源的特徵一起送進模型進行預測。 **🤖 使用深度學習模型後:** - 用 同一個深度模型 處理這三種不同型態的資料。 - 模型會自動學會: 1. 怎麼提取重要特徵(feature) 2. 怎麼篩選資訊(reduction) 3. 怎麼做預測(modeling) - ➕ 範例:神經網路中的降維 1. 假設原始資料有 16 個特徵(最左邊的神經元) 2. 經過隱藏層處理後降到 8,再到 4,再到 2,這過程其實就是一種自動化的降維(在紅色框中註記為 redu.) ![image](https://hackmd.io/_uploads/S1olVqxmgx.png) <center> | 傳統流程(Before Deep Learning) | 深度學習流程(Deep Learning Model) | | -------------------------- | --------------------------- | | 手動擷取特徵 + 降維後建模 | 模型自動學會提取特徵與降維 + 建模 | | 每種資料需個別處理 | 可整合多種資料一起處理 | </center> Merge ![image](https://hackmd.io/_uploads/Bke2G12gmxx.png) ### 迴歸、時序預測的邏輯問題 <center> <img src="https://hackmd.io/_uploads/ryBccS9iC.png", style=" width: 70%; height: auto;"> <div style=" border-bottom: 3px solid #d9d9d9; display: inline-block; color: #999; padding: 3px;"> </div> </center> <br> ## Part4: 大數據分析問題類型 III - 最佳化問題 ### 參數最佳化案例 I: <center> | 溫度 | 濕度 | 良率 | | :--: | :--: | :--: | | 28 | 70% | 95% | | 32 | 60% | 94% | | 29 | 90% | 96% | </center> - 假設已知良率 = $a \times T^2 + b \times T + c \times H^3 + d \times H^{0.5}$,請問 a, b, c, d 分別為多少? ### 參數最佳化案例 II: 如何設計引擎參數讓每個人騎車時都是省油的 :::success **重點筆記**: 最佳化問題通常是客製化的,所以其解題時通常沒辦法直接套模,實務上大多是依據基因演算法的概念,設計一個新的演算法來解決這些客製化問題。 ::: <br> ## Part5: 常見效果好壞評估方式 - 評估指標:$R^2$、$MSE$, $\sum error$, $MAE$, $RMS$ 1. **MAE**:$\frac{1}{n} \sum |error|$ 2. **MAPE**:% 3. **MSE**:$\frac{1}{n} \sum error^2$ 4. **RMSE**:$\sqrt{\frac{1}{n} \sum error^2}$ ### 範例一:基本評估指標的介紹 - 指標類型:$\sum error$, $MSE$ :::info **注意事項**: $MSE$ 單一值差越多懲罰越大 ::: <center> | Index | | 原始資料 | 模型一預測 | 模型案預測 | 模型三預測 | | :--: | :--: | :--: | :--: | :--: | :--: | | 1 | | 3 | 3 | 2 | 3 | | 2 | | 4 | 4 | 5 | 4 | | 3 | | 5 | 5 | 4 | 5 | | 4 | | 6 | 6 | 7 | 6 | | 5 | | 7 | 7 | 7 | 11 | </center> \begin{align} \sum error_{model_1} &= (0) + (0) + (0) + (0) + (0) = 0 \\ \sum error_{model_2} &= (1) + (-1) + (1) + (-1) + (0) = 0 \\ \sum error_{model_3} &= (0) + (0) + (0) + (0) + (-4) = -4 \\ \end{align} <br> \begin{align} \sum |error_{model_1}| &= |0| + |0| + |0| + |0| + |0| = 0 \\ \sum |error_{model_2}| &= |1| + |-1| + |1| + |-1| + |0| = 4 \\ \sum |error_{model_3}| &= |0| + |0| + |0| + |0| + |-4| = 4 \\ \end{align} <br> \begin{align} \sum MSE_{model_1} &= \frac{0 + 0 + 0 + 0 + 0}{5} = \frac{0}{5} = 0 \\ \sum MSE_{model_2} &= \frac{1 + 1 + 1 + 1 + 0}{5} = \frac{4}{5} = 0.8 \\ \sum MSE_{model_3} &= \frac{0 + 0 + 0 + 0 + 16}{5} = \frac{16}{5} = 3.2 \\ \end{align} :::success **重點筆記**: - 模型一預測效果 > 模型二預測效果、模型二預測效果 > 模型三預測效果 - 資料科學可以容忍少量誤差,但無法容忍大誤差。 ::: <br> ### 範例二:對於資料及基數大者 - 指標類型:$RMSE$ <center> | 原始資料 | 預測結果 | | :--: | :--: | | 30000 | 29900 | | 40000 | 40100 | | 50000 | 50100 | | 60000 | 59900 | | 70000 | 70100 | </center> \begin{align} MSE &= (100) + (-100) + (100) + ... + 100 = 10000 \\ RMSE &= \sqrt{10000} = 100 \end{align} <br> ### 範例三:具有不同 scale 的資料集 - 指標類型:$MAE$,由於 $MAE$ 適用於基數差很多的資料。 <center> | 原始資料 | 模型一預測 | 原始資料 | 模型二預測 | | :--: | :--: | :--: | :--: | | 1 | 3 | 100 | 105 | | 2 | 4 | 200 | 205 | | 3 | 5 | 300 | 305 | | 4 | 6 | 400 | 405 | | 5 | 7 | 500 | 505 | </center> \begin{align} \sum |error|_{model_1} &= 2 + 2 + 2 + 2 + 2 = 10 \\ \sum |error|_{model_2} &= 5 + 5 + 5 + 5 + 5 = 25 \\ MAE_{model_1} &= \frac{10}{mean(3,4,5,6,7)} = \frac{10}{3} = 3.3 \\ MAE_{model_2} &= \frac{25}{mean(105, 205, 305, 405, 505)} < 1 \end{align} :::success **重點筆記**: - 模型預測效果: 模型二預測 > 模型一預測 :::