📊 從 8476.TW《台境》週K異常報酬到 AI 自動清洗

更新 發佈閱讀 20 分鐘
投資理財內容聲明

── 一次真實的資料偵錯實戰紀錄

一、故事的起點:一筆「詭異的 +113%」

某天,我在檢查台股週K報酬分布時,發現一筆極度誇張的紀錄: 8476.TW(台境)在 2023 年第一週的週K漲幅竟高達 +113%。

我原以為是興櫃或除牌後復牌的特殊行情,但越看越不對勁。 台境並不是那種會一週翻倍的股票。 於是我開始懷疑:是不是 Yahoo Finance 的資料錯位了?

二、一步步追查:日K、週K、月K、年K 全面交叉比對

我把四個檔案都交給 AI:

  • 8476.TW_台境_.csv(日K)
  • 8476.TW_台境__week.csv(週K)
  • 8476.TW_台境__month.csv(月K)
  • 8476.TW_台境__year.csv(年K)

接著我用提問方式,請 AI 幫我對照週期內的開盤、收盤、報酬,看看那週到底發生了什麼。

AI 先指出:「這週K報酬是因為前一週收盤價在 25 元,下一週開盤價變成 51 元,導致漲幅超過 100%。」 我一開始以為是跳空漲停,但 AI 接著提醒我:

「如果是除權除息或面額變動造成的錯位,股價會『隔天又回到原價』。」

這句話讓我瞬間醒悟。

三、驗證假說:掃描日K,果然「隔天恢復原價」

我請 AI 檢查台境 2022 年底至 2023 年初的日K, 結果真的發現價位在 25↔50 間反覆震盪:

text

日期        收盤     前日變動(%)   次日變動(%)
2022-12-26 25.3150% +100%
2022-12-29 25.4550% +100%

AI 結論:這不是暴漲,而是除權錯位。 Yahoo Finance 把舊面額與新面額價混在一起,造成鏡像跳動。

四、更驚人的發現:全檔案共有 130 筆類似錯位

AI 幫我掃描整份日K檔案,結果找到整整 130 組「隔天恢復原價」的錯誤模式:

text

日期(異常日)  前日收盤  當日收盤  次日收盤  前日變動(%)  次日變動(%)
2021-04-12 18.73 9.32 18.5550.25 +99.01
2024-06-24 60.29 30.15 61.7650.00 +104.88

這些價差絕不可能是真實交易結果,而是資料錯位導致的「虛假暴漲」。

五、AI 的優勢:比人工快、比肉眼準

若用人工檢查,即使有 Excel 或簡單程式,也很難在幾萬筆資料中找到這種對稱跳動。 AI 只花幾秒就完成:

text

方法                 每市場耗時   可檢測樣本數   是否可產出清單   精準度
人工 + Excel 約 1 小時 1 檔 ❌ 低
傳統程式 ±50% 篩選 約 10 分鐘 幾百檔 △ 中
AI 自動 pattern 偵測 約 30 秒 數千檔 ✅ 自動清單 ✅ 高

這段比較不只是效率差異,更是「資料品質管理」的分水嶺。

六、我請 AI 幫我寫了一個「鏡像跳動偵測器」

為了避免這種錯誤再次發生,我讓 AI 幫我寫了一個自動化函數, 專門在日K層偵測「隔天恢復原價」的 pattern:

python

# ------------- 偵測:隔天恢復原價(ping-pong pattern) -------------
def detect_pingpong_patterns(day_df: pd.DataFrame, price_col='收盤', threshold=0.4) -> pd.DataFrame:
"""
偵測「隔天恢復原價」異常(如 502550):
前一日變動與次日變動皆大於門檻,且方向相反。
回傳包含日期與前//次日收盤、變動百分比的 DataFrame(可能為空)
"""
df = day_df.sort_values('日期').reset_index(drop=True).copy()
if price_col not in df.columns:
return pd.DataFrame(columns=['日期(異常日)','前日收盤','當日收盤','次日收盤','前日變動(%)','次日變動(%)'])

df['pct_change'] = df[price_col].pct_change()
rows = []
for i in range(1, len(df)-1):
prev_change = df.loc[i, 'pct_change']
next_change = df.loc[i+1, 'pct_change']
if pd.notna(prev_change) and pd.notna(next_change):
if abs(prev_change) > threshold and abs(next_change) > threshold and prev_change * next_change < 0:
rows.append({
'日期(異常日)': df.loc[i, '日期'],
'前日收盤': df.loc[i-1, price_col],
'當日收盤': df.loc[i, price_col],
'次日收盤': df.loc[i+1, price_col],
'前日變動(%)': round(prev_change * 100, 2),
'次日變動(%)': round(next_change * 100, 2),
})
return pd.DataFrame(rows)

七、為什麼這段程式碼要放在「日K → 週/月/年K」之前?

因為這是錯價進入系統的「唯一入口」。 只要日K層不先攔截,錯誤的報酬會一路傳導到週/月/年K檔,讓統計結果全面失真。

AI 幫我整合成一個流程:

  • 每檔股票在轉換前先執行 detect_pingpong_patterns()
  • 若發現錯位,整檔略過、不寫入週/月/年K
  • 同時輸出 QA 清單(如 _qa/skip_pingpong.csv),方便人工覆核

這樣系統就能在日K階段就自動清除假報酬來源。

八、結論:AI 讓資料清洗變成日常,而非奇蹟

這次的「台境事件」是一個非常真實的例子—— 若不是我一開始懷疑、一步步詢問、讓 AI 幫我比對與驗證, 這筆錯價會一路混進所有週K統計,讓整體報酬分布偏斜。

沒有 AI,這樣的錯誤幾乎不可能在第一時間被找出; 有了 AI,它不僅能幫我找到錯誤,還能生成清單、加進主程式、在轉檔時自動排除。

如今,台境的錯價成了我書中「資料品質章節」最生動的例子—— 它讓我可以大聲說出那句話:

「AI 不是讓我們更聰明,而是讓我們更乾淨地看見真實的市場。」

── 一次真實的資料偵錯實戰紀錄

在這次轉檔過程中,AI 自動偵測出 32 檔股票命中「隔天恢復原價」的鏡像跳動錯位,其中台境(8476.TW)高達 79 筆,是最極端的案例。這份 QA 清單不僅是資料清洗的成果,也成為後續策略分析的基礎。

🧩 Shard 1/22000
⏭️ 1432.TW_大魯閣.csv: [SKIP_PINGPONG] 命中疑似除權錯位 2
⏭️ 1475.TW_業旺.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 1529.TW_樂事綠能.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 2028.TW_威致.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 2348.TW_海悅.csv: [SKIP_PINGPONG] 命中疑似除權錯位 3
⏭️ 2496.TW_卓越.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 2537.TW_聯上發.csv: [SKIP_PINGPONG] 命中疑似除權錯位 2
⏭️ 2539.TW_櫻花建.csv: [SKIP_PINGPONG] 命中疑似除權錯位 2
⏭️ 2724.TWO_藝舍-KY.csv: [SKIP_PINGPONG] 命中疑似除權錯位 2
⏭️ 2754.TWO_亞洲藏壽司.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3004.TW_豐達科.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3046.TW_建碁.csv: [SKIP_PINGPONG] 命中疑似除權錯位 4
⏭️ 3086.TWO_華義.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3092.TW_鴻碩.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3095.TWO_及成.csv: [SKIP_PINGPONG] 命中疑似除權錯位 2
⏭️ 3219.TWO_倚強科.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3530.TW_晶相光.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3537.TWO_堡達.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 3585.TWO_聯致.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 4192.TWO_杏國.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 4419.TWO_皇家美食.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 5364.TWO_力麗店.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 5432.TWO_新門.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6130.TWO_上亞科技.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6219.TWO_富旺.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6236.TWO_中湛.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6272.TWO_驊陞.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6294.TWO_智基.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 6588.TWO_東典光電.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1

🧩 Shard 2/2483
⏭️ 8066.TWO_來思達.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⏭️ 8476.TW_台境_.csv: [SKIP_PINGPONG] 命中疑似除權錯位 79
⏭️ 9902.TW_台火.csv: [SKIP_PINGPONG] 命中疑似除權錯位 1
⚠️ 日K_轉週月年K_差異報告.csv: 缺必要欄位(日期////):日K_轉週月年K_差異報告.csv
⚠️ 重複ID_來源檔名清單.csv: 缺必要欄位(日期////):重複ID_來源檔名清單.csv
🧹 已輸出略過名單:/content/drive/MyDrive/各國股票檔案/tw-share/_qa/skip_pingpong.csv(32 檔)
📤 已將本機暫存 Parquet 搬到 Google Drive


📊 六國 Ping-Pong 異常掃描總覽(threshold = 0.4)

延續上面所述,我們將六個市場的掃描結果進行橫向比較,從掃描規模、異常數量到異常率,幫助大家更直觀理解各市場的資料特性。

markdown

| 市場        | 掃描檔案數 (Files) | 掃描列數 (Rows) | 異常事件數 (PingPong) | 異常股票數 (Stocks) | 異常率 (事件/列數) |
|-------------|---------------------|------------------|------------------------|----------------------|---------------------|
| us-share 🇺🇸 | 8,124 | 13,045,340 | 12,038 | 1,158 |0.0923% |
| jp-share 🇯🇵 | 4,178 | 4,367,174 | 433 | 45 |0.0099% |
| tw-share 🇹🇼 | 2,483 | 6,471,417 | 169 | 32 |0.0026% |
| kr-share 🇰🇷 | 2,713 | 4,194,140 | 100 | 62 |0.0024% |
| hk-share 🇭🇰 | 1,895 | 2,131,592 | 40 | 38 |0.0019% |
| cn-share 🇨🇳 | 5,160 | 13,288,813 | 3 | 3 |0.00002% |

🧠 分析與觀察

1️⃣ 美股:異常密度極高,清洗成本最大

  • 異常事件數高達 12,038 筆,占總列數的 0.0923%
  • 異常股票數達 1,158 檔,占掃描檔案的 14.25%

👉 美股的異常不只是量多,而且分布廣,幾乎每 7 檔就有 1 檔出現 ±40% 的極端跳動。這種情況通常與拆股、股利調整、資料合併或回溯錯誤有關,清洗難度極高。

2️⃣ 日股、台股、韓股:異常率低但精準

  • 日股異常率 ≈0.0099%,台股 ≈0.0026%,韓股 ≈0.0024%
  • 雖然異常事件不多,但每筆都可能是高確信度錯誤

👉 這三個市場的異常事件較少,卻非常適合做 QA 教學或錯誤樣式整理。尤其台股的 169 筆事件中,有 79 筆集中在單一股票《8476.TW 台境》,形成極端個案。

⚠️ 台股特例:8476.TW《台境》異常爆量

雖然台股整體異常率不高,但有一檔股票非常誇張——8476.TW《台境》,單獨就出現了 79 次 Ping-Pong 異常,而且每次都是 ±100% 的跳動。

這種集中式錯誤幾乎可以確定是資料錯誤(例如價格欄位錯置、回溯調整失敗或供應商格式混亂),會直接污染該股票的周、月、年漲幅統計,必須手動剔除。

👉 雖然整體異常機率低,對大盤或整體分布圖影響不大,但像《台境》這種極端個案,還是會造成局部分析失真。

3️⃣ 港股:異常率略低但分布平均

  • 異常率 ≈0.0019%,異常股票數 38 檔
  • 平均每檔股票約出現 1 次異常,分布相對均勻

👉 港股的異常事件雖然不多,但不像台股那樣集中在單一股票,反而呈現「低量、廣分布」的特性,適合做系統性掃描。

4️⃣ 陸股:異常率極低,幾乎無需清洗

  • 掃描列數高達 1,328 萬,卻僅出現 3 筆異常
  • 異常率僅 ≈0.00002%,幾乎可忽略

👉 陸股的 ±10% 漲跌幅限制,加上資料格式標準化與供應商 QC 機制,使得 Ping-Pong 異常極少。這種結果非常適合當作對照組,用來凸顯其他市場的資料風險。

📌 整體觀察:異常率 ≠ 清洗難度

markdown

| 市場        | 異常率高低 | 清洗挑戰 | 備註                     |
|-------------|------------|-----------|--------------------------|
| 美股 🇺🇸 || 極高 | 拆股、回溯錯誤多 |
| 日股 🇯🇵 ||| 除權息處理差異 |
| 台股 🇹🇼 || 局部高 | 台境集中爆量 |
| 韓股 🇰🇷 || 穩定 | 分布均勻 |
| 港股 🇭🇰 || 穩定 | 廣分布型異常 |
| 陸股 🇨🇳 | 極低 | 幾乎無需清洗 | 可當對照組 |


留言
avatar-img
留言分享你的想法!
avatar-img
《炒股不看周月年K漲幅機率就是耍流氓》
3會員
227內容數
普通上班族,用 AI 與 Python 將炒股量化。我的數據宣言是:《炒股不做量化,都是在耍流氓》。
你可能也想看
Thumbnail
在寫爬蟲的時候,很多人第一個想法就是: 能不能寫程式自動去抓 Google 搜尋結果? 但其實 Google 搜尋頁面(https://www.google.com)**不開放 API**,也禁止爬蟲直接抓取。這一集我們就來介紹一個「合法、官方、免費」的 Google 搜尋替代方案:Custom
Thumbnail
在寫爬蟲的時候,很多人第一個想法就是: 能不能寫程式自動去抓 Google 搜尋結果? 但其實 Google 搜尋頁面(https://www.google.com)**不開放 API**,也禁止爬蟲直接抓取。這一集我們就來介紹一個「合法、官方、免費」的 Google 搜尋替代方案:Custom
Thumbnail
你曾想過自動抓取天氣預報、即時匯率、新聞標題嗎? 這一集,我們來學 Python 怎麼開口問網路:「嘿,給我點資料好嗎?」 本篇將用部落格語氣講解實作,讓你從完全不懂網路的初學者,也能寫出基本爬蟲、打 API,拿到真實世界的資料! 🧠 什麼是 API? API 是英文 Applicat
Thumbnail
你曾想過自動抓取天氣預報、即時匯率、新聞標題嗎? 這一集,我們來學 Python 怎麼開口問網路:「嘿,給我點資料好嗎?」 本篇將用部落格語氣講解實作,讓你從完全不懂網路的初學者,也能寫出基本爬蟲、打 API,拿到真實世界的資料! 🧠 什麼是 API? API 是英文 Applicat
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
網路爬蟲(web crawler),也叫網路蜘蛛(spider) 是一個強大的自動化工具,可以自由瀏覽、擷取訪問網頁的各項資訊,例如:新聞文章、電商商品價格,當專案中需要添加外部數據或進行大量資料收集時,網路爬蟲就是一個非常實用的工具。
Thumbnail
網路爬蟲(web crawler),也叫網路蜘蛛(spider) 是一個強大的自動化工具,可以自由瀏覽、擷取訪問網頁的各項資訊,例如:新聞文章、電商商品價格,當專案中需要添加外部數據或進行大量資料收集時,網路爬蟲就是一個非常實用的工具。
Thumbnail
上一篇我們已經介紹過Google Colab的基本用法,建議可以先行閱讀「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」,進行基本概念與環境的建置再進行下一步會比較容易進行學習。 雖然網路上已經提供非常多的股市資訊,但各個網站可能都零零散散,難免我們得
Thumbnail
上一篇我們已經介紹過Google Colab的基本用法,建議可以先行閱讀「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」,進行基本概念與環境的建置再進行下一步會比較容易進行學習。 雖然網路上已經提供非常多的股市資訊,但各個網站可能都零零散散,難免我們得
Thumbnail
Facebook 時常改版、限制多,要找到一個適合、好用且簡單上手的工具相當困難,否則就要自己寫龐大的程式爬蟲。本篇介紹簡單好用的 facebook-scraper 套件幫助你順利爬蟲。
Thumbnail
Facebook 時常改版、限制多,要找到一個適合、好用且簡單上手的工具相當困難,否則就要自己寫龐大的程式爬蟲。本篇介紹簡單好用的 facebook-scraper 套件幫助你順利爬蟲。
Thumbnail
學校的規定每天早上6點到十點,要到學校網站的體溫填報系統上傳當日體溫,如果超時未上傳會記警告,我覺得非常麻煩,於是我想用程式自動在體溫填報系統上傳體溫。 因為太多人使爬蟲上傳體溫,學校開始用驗證的方式阻擋網路爬蟲,於是我開始想辦法聽過驗正常序,讓網路爬蟲成功上傳體溫。
Thumbnail
學校的規定每天早上6點到十點,要到學校網站的體溫填報系統上傳當日體溫,如果超時未上傳會記警告,我覺得非常麻煩,於是我想用程式自動在體溫填報系統上傳體溫。 因為太多人使爬蟲上傳體溫,學校開始用驗證的方式阻擋網路爬蟲,於是我開始想辦法聽過驗正常序,讓網路爬蟲成功上傳體溫。
Thumbnail
在昨天的教學中,我們是繪畫K線圖、技術指標來進行一個教學,今天我們做一個基本面的資料抓取教學,也就是財報的部分,這樣我們往後在進行股票篩選,不論是要從技術面或是基本面甚至是籌碼面都可以輕鬆用程式來完成
Thumbnail
在昨天的教學中,我們是繪畫K線圖、技術指標來進行一個教學,今天我們做一個基本面的資料抓取教學,也就是財報的部分,這樣我們往後在進行股票篩選,不論是要從技術面或是基本面甚至是籌碼面都可以輕鬆用程式來完成
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News