# 【如何啟動你的大數據分析案?】
<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

#### **維度太多會怎樣**
**\# of suitable dimensions too much:**
1. 效果優良
2. 效果不好:
- Maybe some contradiction data
- Model size will be increased
**\# of suitable dimensions too less:**
1. 效果不好:

:::success
**重點筆記**: **How nn deals the unrelated dimension**

:::
#### Goal to achieve
- Dimentsion reduction before Class & Clustering (Let the data points spread more widely)

- Dimension reduction before Regression, prediction (Let the data be line up)

- 降維效能的評估:我們無法得知降到幾維最佳,因此評估的方法為尋找肘點(所以所有維度都要測)
1. 質化;視覺化降維結果。
2. 量化:分散度,群聚性,分類準確度。

:::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

3. Feature Extraction:$0.8A + 0.1B + 0.1C + 0.5E + 0.7Z$
- PCA:資料分佈越散開越好

- LDA - Dedicated to classification

- PCA v.s LDA
4. **Real Example**- Increasing MNIST Recognition Performance Using Dimensionality Reduction
- Original

- PCA

- LDA

- t-SNE

<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 等前饋網路即可完成辨識。
:::

### 分類問題
- **介紹:** 已知東西的類別,判斷新進東西所屬的類別。具有標準答案。
- **分類問題的判斷標準:** 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.)

<center>
| 傳統流程(Before Deep Learning) | 深度學習流程(Deep Learning Model) |
| -------------------------- | --------------------------- |
| 手動擷取特徵 + 降維後建模 | 模型自動學會提取特徵與降維 + 建模 |
| 每種資料需個別處理 | 可整合多種資料一起處理 |
</center>
Merge

### 迴歸、時序預測的邏輯問題
<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
**重點筆記**:
- 模型預測效果: 模型二預測 > 模型一預測
:::