💡一句話定義
為什麼不全查?因為太貴(全台 2,300 萬人逐一問)、太慢(結果出來已過時)、或根本做不到(檢測每顆燈泡的壽命要把它們全用壞)。所以統計學花了一百年研究「怎麼抽」,機器學習的訓練/測試切分、不平衡資料處理也都是抽樣問題的變形。
🧭母體 vs 樣本、抽樣誤差 vs 非抽樣誤差
你想下結論的全部對象。例:全台 18 歲以上選民、今年生產的全部晶片、平台所有用戶。
實際觀察到的那一部分。樣本算出來的數(樣本平均、樣本比例)叫統計量,用來估母體的參數。
實際用來抽的名單(電話簿、會員清單)。名單和母體對不上,就是偏差的第一個來源。
兩種誤差,本質完全不同
| 面向 | 抽樣誤差 Sampling error | 非抽樣誤差 Non-sampling error |
|---|---|---|
| 來源 | 只抽了一部分,運氣造成樣本和母體有點不同 | 方法本身有問題:名單不全、問法誘導、受訪者說謊、沒回應、資料輸錯 |
| 方向 | 隨機,有時高有時低,平均起來會抵銷 | 系統性(偏差 bias),永遠偏同一邊 |
| 增加樣本數 | ✅ 會變小(n 四倍、誤差減半) | ❌ 不會變小,樣本再大一樣偏 |
| 能否量化 | 可以,用標準誤、信賴區間算出來 | 很難,通常只能靠設計避免 |
| 經典例子 | 民調 ±3% | 1936 年《文學文摘》用電話簿與汽車登記名單預測美國總統大選,收了 240 萬份問卷仍大錯——名單只涵蓋有錢人 |
🎲四種機率抽樣:每個人都有已知的被抽中機率
機率抽樣(probability sampling)的共同點:母體裡每個單位被抽中的機率是已知且非零的,所以可以算抽樣誤差、做統計推論。四種方法差在「怎麼把隨機性用進去」:
| 方法 | 怎麼抽 | 適用情境 | 優點 | 缺點/注意 |
|---|---|---|---|---|
| 簡單隨機 Simple random | 所有單位編號,用亂數抽 n 個,每個組合機率相同 | 母體不大、有完整名單、內部差異不特別分群 | 最單純、無偏、理論最乾淨 | 需要完整名單;小群體可能剛好沒抽到 |
| 系統 Systematic | 算間隔 k=N/n,隨機起點後每隔 k 個抽一個 | 生產線、排隊人流、連續資料流,沒完整名單也能做 | 執行簡單、樣本分布均勻 | 名單有週期性時會出事(每 7 筆一個週末,k=7 就永遠抽到同一天) |
| 分層 Stratified | 先依已知特徵分成互斥的層(性別、地區、年級),每層各自隨機抽,常按比例配置 | 層內相似、層間差異大;要確保小群體一定有代表 | 比簡單隨機更精準(變異更小)、每層都有估計值 | 要事先知道分層變數;層數太多變複雜 |
| 叢集 Cluster | 先把母體切成許多叢(學校、村里、箱子),隨機抽幾個叢,叢內全查 | 母體分散、名單只到叢的層級、要省交通成本 | 省錢省時、不需要個體名單 | 叢內同質性高時精準度比簡單隨機差;叢間差異大就更差 |
🙋非機率抽樣:方便,但推論站不住
非機率抽樣(non-probability sampling)沒有辦法算出每個單位被抽中的機率,所以不能計算抽樣誤差,結論只能說「在這群人身上看到」,不能推到母體。探索性研究、前測、找稀有族群時仍很常用。
抓手邊最容易拿到的:校門口問學生、網站跳出問卷。最快,也最容易偏(只問到願意停下來、有上網的人)。
先定各類別要多少人(男 50、女 50),再非隨機地找人湊滿。像分層抽樣的「非隨機版」:比例對了,但每層內誰被找到仍看訪員方便。
找到幾個受訪者,請他們介紹下一個。適合沒有名單的隱性族群(罕病患者、特定社群),但樣本高度集中在同一社交圈。
🎮互動:抽樣模擬器
下面是一個 200 個點的母體,分成兩群(🔵 A 群、🟠 B 群)。B 群在不同區塊裡的密度不一樣(左上少、右下多),就像現實中不同地區的差異。選抽樣方法、調樣本數,按「抽一次」看樣本比例和母體比例差多少;按「重抽 100 次」看估計值的分布——分布窄=精準,分布中心偏離真值=有偏。
🌍 母體(200 點,10 個區塊)與本次樣本(黑框)
📊 重抽 100 次:樣本 B 比例的分布
📏樣本數與信賴區間:n 四倍、誤差減半
抽樣誤差的大小由標準誤(standard error)決定。估比例時,標準誤 ≈ √(p(1−p)/n),95% 信賴區間的半寬(誤差界限,margin of error)≈ 1.96 × 標準誤。注意分母是 √n:
🤖延伸到機器學習:切分、stratify、過/欠抽樣
機器學習裡到處都是抽樣,只是換了名字:
- 訓練/測試切分(train/test split)就是一次簡單隨機抽樣:把資料隨機分成訓練(學)與測試(考)。測試集是「樣本」,用來估模型在母體(未來資料)上的表現。
- stratify=分層抽樣:分類問題若正類只有 5%,隨機切分可能讓測試集正類比例變 2% 或 8%,評估就不準。
train_test_split(X, y, stratify=y)讓訓練、測試的類別比例與原資料相同。交叉驗證的StratifiedKFold同理。 - 不平衡資料的過抽樣/欠抽樣:欠抽樣(undersampling)把多數類隨機丟掉一部分;過抽樣(oversampling)把少數類重複或合成(SMOTE 在少數類鄰居之間插值造新點)。只能對訓練集做,測試集要保持真實比例。整體策略看 極度不平衡資料集。
- 時間序列不能隨機切:隨機抽會讓模型「看到未來」,要按時間順序切、用 walk-forward 驗證。
- 標註資料的抽樣:預算只夠標 1,000 筆時,用分層確保每個類別、每個來源都有;主動學習(active learning)則是「挑模型最不確定的來標」,是一種目的性抽樣。
from sklearn.model_selection import train_test_split
X_tr, X_te, y_tr, y_te = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42 # 分層:各類比例一致
)
# 過/欠抽樣只對訓練集做(imblearn):
# from imblearn.over_sampling import SMOTE
# X_tr, y_tr = SMOTE().fit_resample(X_tr, y_tr)
⚠️常見誤區
錯。大樣本只縮小抽樣誤差,偏差(名單不全、自願回應)一點都不會少。240 萬份的《文學文摘》就是例子。
只分析「活下來」的對象:只看現有客戶談滿意度、只看上市公司談成功要素。消失的那群才是關鍵。
開放式網路投票、App 評分——意見強烈的人才會回,溫和多數沉默。
每 7 筆抽一筆、資料剛好以週為週期 → 永遠抽到星期一。間隔要避開資料的自然週期。
「隨機抽 5 所學校、全校學生都調查」是叢集;「每所學校各抽 30 人」是分層。
SMOTE 合成的點若跑進測試集,等於用「複製的答案」考試,分數虛高。切分永遠在前。
✅自我檢測
Q1. 某校要調查學生滿意度,先把學生依年級分成四組,每組各隨機抽 50 人。這是哪種抽樣?
Q2. 民調只用市話名單,年輕人多半沒有市話。把樣本從 1,000 增加到 10,000 能解決這個問題嗎?
Q3. 樣本 400 人時誤差界限約 ±5%,想降到 ±2.5%,大約需要多少人?
Q4. train_test_split(X, y, stratify=y) 中的 stratify=y 作用是?
Q5. 全國有 3,000 間便利商店,研究者隨機抽 30 間,把這 30 間的所有店員都訪談。這是?
🎯重點整理
- 目的:用樣本推母體;代表性靠「隨機」保證,不是靠「數量」。
- 兩種誤差:抽樣誤差隨 n 變小(∝ 1/√n);非抽樣誤差(偏差)n 再大也不會消失。
- 四種機率抽樣:簡單隨機(亂數)、系統(固定間隔,怕週期)、分層(每層都抽,求精準)、叢集(抽群全查,求省錢)。
- 非機率抽樣:便利、配額、滾雪球——方便但不能算誤差、不能推論母體。
- ML 對應:train/test split=簡單隨機;stratify=分層;過/欠抽樣只對訓練集做;時序資料按時間切。