跳至主要內容

    賭場怎麼抓 AI 老千?規則、統計基準線與行為模型三層異常偵測實戰(2026)

    只看輸贏會把警示名額全花在真人高手身上;結合統計基準線、Isolation Forest 與人工調查回饋,才能守住不斷偽裝的對手

    sunny 桑尼· · 28 MIN READ · 311 次瀏覽

    賭場怎麼抓 AI 老千?規則、統計基準線與行為模型三層異常偵測實戰(2026)
    本文目錄

    訓練一個打贏職業牌手的 AI 只要大約 144 美元,賭場要怎麼抓?這篇帶你一次看懂異常偵測的三層做法,附一個自己就能跑的模擬實驗!

    2019 年,卡內基美隆大學和 Facebook 的研究團隊發表了 Pluribus:一個在六人無限注德州撲克裡,贏過頂尖職業牌手的 AI。論文裡有一個數字比勝率更讓人在意:訓練它的策略,用一台 64 核心的伺服器跑 8 天,換算成雲端費用大約 144 美元。

    研究團隊沒有公開程式碼。MIT Technology Review 當時的標題直接寫:這個 AI 可能毀掉線上撲克產業。

    幾年後,事情真的發生了。2020 年,GGPoker 封鎖了 40 個使用「即時輔助軟體」的帳號,沒收超過 117 萬美元,補償了 4,329 位玩家。2023 年,888poker 因為 AI 與即時輔助封了 161 個帳號,退款給 4,068 位玩家。

    老千以前要練手法,現在要的是一台電腦。

    那賭場和牌局平台怎麼抓?答案聽起來有點反直覺:他們越來越少去看「手」,越來越多去看「行為像不像人」。這件事在資料科學裡有個名字,叫異常偵測(anomaly detection)。

    先說明一件事:在台灣,賭博本身就是犯罪。刑法第 266 條規定,在公共場所或透過網路賭博財物,都可以處罰金。這篇只談偵測方怎麼想,不談任何作弊方法;我想借賭場這個極端場景,講一個在詐騙、資安、工廠設備監控裡都會遇到的問題。

    快速回答 賭場和線上牌局抓 AI 老千,靠的是異常偵測:定義正常玩家長什麼樣子,把偏離最遠的帳號排序,交給人工調查判定。做法可以分三層:規則、統計基準線、看行為像不像人的模型。線上撲克平台 WPT Global 2025 年的作弊報告,就標記「過度一致、近乎完美的決策」。這套做法的優勢建立在對手還不夠像人,對手學會偽裝,模型就會過期,要靠調查結果回饋持續更新。

    異常樣本與標籤極少,偵測必須先定義「正常行為」再抓偏離者

    學術上最常被引用的定義來自 Chandola 等人 2009 年的綜述:異常,是不符合預期正常行為的模式。

    注意這個定義的重心在「正常」。你沒辦法列出所有作弊手法,但你可以描述正常玩家長什麼樣子,再把離正常太遠的人挑出來。

    我在製造和風控的專案都做過異常偵測。產線上找的是不正常的設備、不良的批次;風控找的是不正常的交易和帳號。兩邊的第一個體會一樣:異常的樣本極少,有標籤的更少。你手上幾乎沒有「這筆就是詐騙」的確定答案,只能從大量正常資料裡,去描述什麼叫正常。

    賭場的處境也是這樣。被確認的老千極少,而且每一個新手法剛出現時,都沒有前例可以學。

    所以實務上的偵測,通常是一層一層疊上去的。

    結論:三層偵測只負責把可疑帳號按風險排好順序,真正判定作弊的是人工調查,調查結果再回頭更新三層(資料來源:本文整理自 Chandola et al., 2009 與 Valve VACnet, 2018)。

    下面依序講這三層:每一層抓得到什麼、漏掉什麼。圖最右邊的人工調查,和底下那條回饋的虛線,會在文章最後兩個邊界再出現。

    第一層寫單一門檻規則:好解釋但只抓已知手法,還會誤傷真人高手

    最直覺的做法是寫規則:贏太多就查、下注忽然變大就查、同一批人老是同桌就查。

    規則的好處是好解釋。調查員、主管、被查的玩家,都聽得懂「你這個月贏得異常多」。我在風控專案裡也一樣:規則一定要留著,因為出事時,有人要能說清楚為什麼這筆被擋下來。

    但規則有兩個硬傷。

    第一,它只抓得到你已經知道的手法。新的作弊方式不會剛好觸發舊規則。

    第二,它會誤傷真正的高手。「贏太多」這條規則,抓到的人裡面很大一部分是本來就打得好的常客。後面的模擬實驗會看到,在我設定的情境裡,這條規則用掉的警示名額,幾乎全部花在真人身上。

    第二層建統計基準線:跟自己過去與同群玩家比,抓出突發偏離

    第二層把問題從「這個數字大不大」改成「這個數字對這個人來說正不正常」。

    做法是建立基準線(baseline):和這個玩家自己的過去比,也和同一類型的玩家比。一個平常下小注的人突然連續下大注,一張賭桌的輸贏分布明顯偏離同時段其他桌,這些都是基準線能抓到、單一門檻抓不到的變化。

    基準線的前提是要有資料。實體賭場這幾年在賭桌上加裝辨識籌碼和撲克牌的攝影機,影像辨識廠商 Dallmeier 在 2019 年就宣稱,它的系統在澳門裝了超過 1,000 張賭桌。這是廠商的說法,但它說明了一件事:實體賭桌正在變成可以被記錄、被比較的資料。

    第三層上行為模型:同時看節奏、時長與決策穩定度,抓出「太像機器」的組合

    真正改變攻防的是第三層:把很多訊號放在一起看。

    一個 AI 輔助的玩家,單看勝率可能不突出。但把決策的節奏、在線的時間、每一手的選擇放在一起,就會出現人很難同時具備的組合。線上撲克平台 WPT Global 在 2025 年公開的作弊報告裡提到,它和 GTO Wizard 合作,標記「過度一致、近乎完美的決策」。這句話很關鍵:人類高手也會犯錯、也會累、節奏會亂;太穩定本身就是訊號。

    電玩產業走得更早。Valve 在 2018 年的 GDC 演講介紹了 VACnet,用深度學習分析《CS:GO》玩家的操作來抓外掛。據轉述這場演講的技術文章,玩家檢舉送審的案件,成案率大約 15–30%;VACnet 送審的案件,成案率是 80–95%。同一篇文章用一句話總結它的分工:模型標記,人來判定。

    做行為模型時,最常用的方法之一叫 Isolation Forest(孤立森林)。它的想法很簡單:隨機切資料,越容易被單獨切出來的點,越可能是異常。2008 年提出它的論文特別指出,這個方法在訓練資料裡完全沒有異常樣本時也能運作。這正好對上「標籤幾乎沒有」的現實。

    原論文用一張圖把這個想法講完:同一群點,分別去隔離中間的一個點和邊緣的一個點,看各要切幾刀。

    在同一群點裡,正常點要隨機切 12 次才被單獨隔開,落在邊緣的異常點只要 4 次:「幾刀能切出來」本身就是可疑分數,不需要先有異常標籤。(圖片來源:Liu, Ting & Zhou〈Isolation Forest〉ICDM 2008,經 Sunny DataScience 中文重點標註)

    放到牌桌上,一個帳號的出手節奏、在線時長和決策穩定度,如果同時跟大多數玩家都不一樣,它就像右圖那個點,幾刀就被切出來。這件事在現實資料裡成不成立,下面用模擬實驗來檢查。

    模擬實驗驗證:不偽裝時基準線已抓到 97.8%,對手開始偽裝才需要行為模型

    前面三層都還停在說法。說法要能被檢查,所以我寫了一個模擬實驗。程式碼全部列在下面,依序貼進同一個檔案就能跑,只需要 numpy、pandas、scikit-learn。

    想驗證的三件事

    1. 看行為比看結果準:只看勝率的規則,會把警示名額花在真人高手身上。
    2. 基準線拿到大部分效果:對手不偽裝時,簡單的統計基準線就能抓到大部分自動化帳號,模型多出來的效果不大。
    3. 模型的優勢有期限:行為模型贏在把幾個特徵合起來看。對手越像人,這個優勢越小,最後會消失。

    跑出來的結果如果和這三點不同,前面的說法就要改。

    前提假設

    模擬的好處是答案已知:我知道誰是自動化帳號,才算得出每種方法抓對幾個。代價是所有分布都是我設定的,所以先把設定攤開。

    分析單位是「一個帳號一個月」。每個帳號用三個特徵描述:勝率,也就是每 100 手贏幾個大盲注;決策節奏的變異係數,真人想牌的時間忽長忽短,數字大,程式很穩定,數字小;每天在線時數。帳號分成三群:

    帳號群數量勝率(每 100 手,大盲注)決策節奏變異係數每天在線時數

    一般玩家
    數量
    1,950
    勝率(每 100 手,大盲注)
    平均 −2
    決策節奏變異係數
    平均 0.8(忽快忽慢)
    每天在線時數
    中位數約 2 小時,少數人很長
    強手常客
    數量
    60
    勝率(每 100 手,大盲注)
    平均 +9
    決策節奏變異係數
    平均 0.8
    每天在線時數
    同一般玩家
    自動化帳號,偽裝 0
    數量
    30
    勝率(每 100 手,大盲注)
    平均 +5
    決策節奏變異係數
    平均 0.15(很穩定)
    每天在線時數
    約 9 小時
    自動化帳號,偽裝 1
    數量
    30
    勝率(每 100 手,大盲注)
    平均 +5
    決策節奏變異係數
    照真人的分布
    每天在線時數
    照真人的分布

    另外四個前提:

    • 自動化帳號會贏,但贏得比強手少。這是刻意的設定:如果它們勝率最高,只看勝率就抓得到,實驗就沒有意義。想長期獲利的作弊者,也有理由不要贏得太顯眼。
    • 偽裝只改行為,不改勝率。偽裝程度從 0 到 1,自動化帳號的節奏與在線時數,按比例從表中「偽裝 0」那一列移到「偽裝 1」那一列。
    • 警示名額固定 2%,也就是 2,040 個帳號裡最可疑的 41 個。調查團隊一天能看的案子有限,在同樣的人力下比較誰抓得準,才公平。
    • 每個設定換 30 組亂數種子重跑,取平均,避免哪一次剛好運氣好。

    思路與程式碼

    程式分三步:造資料、三種方法各自打分數、在同樣的名額下看抓到誰。

    第一步是造資料,把上面那張表寫成程式。勝率和節奏用常態分布抽;在線時數用對數常態分布,因為它有長尾,大部分人玩一兩個小時,少數人掛很久。mimicry 就是偽裝程度,自動化帳號的節奏與在線時數,是機器分布和真人分布按這個比例的加權。

    import numpy as np
    import pandas as pd
    from sklearn.ensemble import IsolationForest
    from sklearn.preprocessing import StandardScaler
    
    N_PLAYERS, N_REGULARS, N_BOTS = 1950, 60, 30
    BUDGET = 0.02
    SEEDS = range(30)
    MIMICRY = [round(x, 1) for x in np.linspace(0, 1, 11)]
    
    
    def simulate(rng: np.random.Generator, mimicry: float) -> pd.DataFrame:
        def human(n, win_mu, win_sd):
            return pd.DataFrame({
                "win_rate": rng.normal(win_mu, win_sd, n),
                "rhythm_cv": rng.normal(0.80, 0.15, n).clip(0.05),
                "daily_hours": rng.lognormal(np.log(2.0), 0.45, n),
            })
    
        players = human(N_PLAYERS, -2.0, 6.0).assign(group="player")
        regulars = human(N_REGULARS, 9.0, 3.0).assign(group="regular")
        bots = pd.DataFrame({
            "win_rate": rng.normal(5.0, 3.0, N_BOTS),
            "rhythm_cv": (1 - mimicry) * rng.normal(0.15, 0.05, N_BOTS) + mimicry * rng.normal(0.80, 0.15, N_BOTS),
            "daily_hours": np.exp((1 - mimicry) * rng.normal(np.log(9.0), 0.2, N_BOTS)
                                  + mimicry * rng.normal(np.log(2.0), 0.45, N_BOTS)),
        }).assign(group="bot")
        return pd.concat([players, regulars, bots], ignore_index=True)
    

    第二步是三種偵測方法,一種代表一層:

    • 規則直接拿勝率當分數。
    • 統計基準線把每個特徵換成穩健 z 分數,帳號的分數取三個特徵裡偏得最遠的那一個。這裡用中位數和 MAD(中位數絕對離差)取代平均和標準差,因為極端值正是要找的對象,不能讓它們把尺度撐大;乘上 1.4826,是讓 MAD 在常態分布下和標準差對齊。
    • 行為模型把三個特徵標準化後丟進 Isolation Forest。score_samples 的值越低越容易被孤立,所以取負號當可疑分數。

    flag_top 是公平比較的關鍵:不管分數怎麼算,每種方法都只能挑分數最高的 41 個帳號。

    def flag_top(scores: np.ndarray) -> np.ndarray:
        k = int(round(BUDGET * len(scores)))
        flagged = np.zeros(len(scores), dtype=bool)
        flagged[np.argsort(-scores)[:k]] = True
        return flagged
    
    
    def run(mimicry: float, seed: int) -> dict:
        rng = np.random.default_rng(seed)
        df = simulate(rng, mimicry)
        rule = flag_top(df["win_rate"].to_numpy())
        feats = df[["win_rate", "rhythm_cv", "daily_hours"]]
        med = feats.median()
        mad = (feats - med).abs().median() * 1.4826
        baseline = flag_top(((feats - med) / mad).abs().max(axis=1).to_numpy())
        X = StandardScaler().fit_transform(df[["win_rate", "rhythm_cv", "daily_hours"]])
        iso = IsolationForest(n_estimators=200, random_state=seed).fit(X)
        model = flag_top(-iso.score_samples(X))
        out = {}
        for name, flagged in (("rule", rule), ("baseline", baseline), ("model", model)):
            hits = df.loc[flagged, "group"].value_counts()
            out[name] = {
                "recall": float(hits.get("bot", 0) / N_BOTS),
                "alerts_bot": int(hits.get("bot", 0)),
                "alerts_regular": int(hits.get("regular", 0)),
                "alerts_player": int(hits.get("player", 0)),
            }
        return out
    

    第三步是掃過 11 個偽裝程度,每個跑 30 次,算兩個數字:每種方法平均抓到幾成的自動化帳號(召回率),以及對手不偽裝時,41 個名額分別給了哪一群人。整個實驗在一般筆電上大約跑一分鐘。

    rows = [{"mimicry": m, "seed": s, "detector": d, **v}
            for m in MIMICRY for s in SEEDS for d, v in run(m, s).items()]
    res = pd.DataFrame(rows)
    
    # Recall (%) by mimicry level: share of the 30 automated accounts each detector catches
    print((100 * res.groupby(["mimicry", "detector"])["recall"].mean().unstack()).round(1))
    # Who fills the 41 alerts when the automated accounts do not disguise themselves
    print(res[res.mimicry == 0].groupby("detector")[["alerts_bot", "alerts_regular", "alerts_player"]].mean())
    

    結果

    把印出來的數字畫成圖:

    結論:對手不偽裝時,只看勝率的規則把 40.6 個警示名額花在真人身上,而統計基準線(29.3 個)與行為模型(30 個)幾乎全抓到;對手開始偽裝後,行為模型比基準線撐得更久,但偽裝達 100% 時三種方法皆失效(資料來源:Sunny DataScience 模擬實驗 experiment.py,30 次模擬平均)。

    左邊回答「哪一層比較準」。對手不偽裝時,只看勝率的規則在 41 個名額裡,平均抓到 14 個強手常客、26 個一般玩家,自動化帳號不到 1 個。原因不難理解:在這個設定裡,自動化帳號的勝率不錯,但沒有好到最頂端;真正贏最多的是打得好的人,和運氣好的人。統計基準線平均抓到 29 個,行為模型抓到全部 30 個。

    換成實務上常用的指標:41 個名額裡真正是作弊帳號的比例(precision@41),規則約 1%,基準線約 71%,行為模型約 73%。對手不偽裝時,簡單的基準線已經拿到大部分的效果。

    右邊回答「模型多做的那一步值多少」。對手開始偽裝後,差距才出現:偽裝程度 30% 時,行為模型抓到八成,基準線不到六成。原因是基準線一次只看一個特徵,每個特徵都只偏一點點的帳號,它看不出來;Isolation Forest 看的是組合,三個「有點怪」加在一起就被切出來了。但偽裝到 50%,模型也只剩三成;到 100%,三種方法都抓不到。

    回到一開始想驗證的三件事,三件都成立。第一,只看勝率的規則,41 個名額平均有 40.6 個給了真人。第二,對手不偽裝時,基準線平均抓到 29.3 個,模型抓到 30 個,差不到 1 個。第三,模型的領先在偽裝 30% 時最明顯,之後一路縮小,到 100% 時三種方法都抓不到。

    這是模擬,數字本身沒有意義,別拿去推論任何真實平台。值得帶走的是驗證的方式:先寫下想證明什麼,把假設攤開,再讓程式回答。你也可以改設定自己試,例如把自動化帳號的勝率調到比強手高,或把名額從 2% 放寬到 5%,看看三個結論哪一條先倒。

    異常偵測專案落地的五個決定:名額與特徵比換模型更關鍵

    上面的實驗把問題簡化了。真的要在一個平台、一家銀行或一條產線上做異常偵測,資料科學的工作大多花在模型以外。我把它整理成五個決定,順序大致就是專案的順序。

    決定一:一筆資料是什麼,名額有多少

    第一個要定的是分析單位:一個帳號的一個月、一筆交易、一台設備的五分鐘。單位決定了特徵怎麼算,也決定了警示送出去時,調查的人拿到的是什麼。單位切太細,雜訊多、警示多;切太粗,事情發生了很久才看得到。

    第二個是名額:調查團隊一天看得完幾件。這個數字比任何模型參數都重要,因為它直接決定門檻,也決定了評估方式。上面的實驗用 2% 當名額,就是在模擬這件事。

    決定二:特徵,比換模型更有用

    異常偵測的效果,大部分來自特徵。實務上常用的有四類:

    • 和自己的過去比:這個月的下注金額,是這個帳號過去六個月平均的幾倍。
    • 和同群比:同一個桌級、同一個地區、同一種設備型號裡,這個值排在哪裡。高手和新手的「正常」不一樣,分群後再比,誤報會少很多。
    • 節奏與組合:比例、變異程度、時間間隔,以及幾個特徵一起出現的組合。實驗裡行為模型贏過基準線的地方,就在這一類。
    • 關係:誰和誰常同桌、哪些帳號共用裝置或付款方式。串通這類問題,單看個人特徵抓不到,要用圖(graph)的方法看群體。

    有一個陷阱要特別注意:特徵只能用當下拿得到的資料算。用整個月的資料去判斷月中的一筆交易,離線評估會很漂亮,上線後就失靈。這叫資料洩漏(data leakage),在異常偵測裡特別常見,因為事後確認的案例很容易被混進特徵裡。

    決定三:方法,從最簡單的開始

    異常偵測的方法大致分成幾個家族:

    家族怎麼判斷異常代表方法適合

    統計基準線
    怎麼判斷異常
    離中心太遠
    代表方法
    z 分數、穩健 z 分數、管制圖
    適合
    單一指標、要好解釋、先上線
    距離與密度
    怎麼判斷異常
    附近沒什麼鄰居
    代表方法
    k 近鄰、LOF
    適合
    特徵不多、群體形狀複雜
    孤立
    怎麼判斷異常
    很容易被單獨切出來
    代表方法
    Isolation Forest
    適合
    特徵多、資料量大、沒有標籤
    重建誤差
    怎麼判斷異常
    模型學不會還原它
    代表方法
    PCA、自編碼器
    適合
    高維資料、影像、感測器訊號
    監督式
    怎麼判斷異常
    像過去確認過的案例
    代表方法
    梯度提升樹
    適合
    累積了足夠的確認案例之後

    我的建議是從第一列開始。製造業用了幾十年的管制圖(control chart),本質上就是統計基準線;在實驗裡,它也拿到了大部分的效果。先讓基準線上線、累積調查結果,再決定要不要換更複雜的方法。複雜的方法要贏的,是基準線抓不到的那一塊,而這一塊要有資料才量得出來。

    決定四:沒有標籤,怎麼知道好不好

    這是異常偵測最難的地方,也是它和一般分類問題最不一樣的地方。實務上通常組合三種做法:

    • 用名額評估:看 precision@k,也就是送出去的 k 件裡有幾件是真的。調查團隊的時間有限,這個數字最貼近他們的感受。
    • 注入合成異常:把已知形態的異常放進正常資料,看抓回來幾成。上面的實驗就是這個做法,它能量召回率,但只量得到你想像得到的異常。
    • 用時間切開回測:拿過去確認過的案例,只用當時拿得到的資料重跑,看能不能提早抓到。

    等確認案例累積起來,可以畫 precision-recall 曲線來比較方法。在這種極度不平衡的資料上,ROC 曲線看起來會過度樂觀;Saito 和 Rehmsmeier 2015 年的研究建議,不平衡資料優先看 precision-recall 曲線。

    決定五:上線之後,解釋、監控、回饋

    模型上線只是開始。三件事決定它能不能活下去:

    • 給理由:每一筆警示附上「是哪幾個特徵讓它分數高」。調查員看得懂理由,才會信任警示;用 SHAP 這類方法可以算出每個特徵的貢獻。這直接對應前面講的那個問題:誤報一多,現場就不信任。
    • 監控三個數字:每天的警示量、調查後的命中率、主要特徵的分布有沒有漂移。警示量突然掉下來,不一定是世界變乾淨了,可能是對手換了方法。
    • 把調查結果變成標籤:每一件調查完的案子,都是一筆標籤。標籤夠了,就能從無監督走向半監督、再走向監督式;新的確認手法,則先寫成規則當天補上。
    結論:標籤是人工調查做出來的;方法雖可隨標籤累積往右升級到監督式,但最左邊的無監督層必須一直留著,才能抓到監督式模型不認識的新手法(資料來源:本文整理自 Chandola et al., 2009 與 Liu et al., 2008)。

    所以成熟的系統通常三種同時在跑:規則補新手法,監督式模型抓見過的,無監督模型守著沒見過的。

    這五個決定,也就是文章開頭那張架構圖裡,每一個方框背後真正的工作。

    邊界一:異常只代表「值得調查」,誤報太多會摧毀現場信任

    圖 2 左邊還有一個容易漏看的地方:行為模型的 41 個名額裡,除了 30 個自動化帳號,還有大約 10 個一般玩家。

    他們沒有作弊,只是行為不常見:有人打得特別久,有人節奏特別穩。Chandola 的綜述講得很直接:正常和異常的邊界通常不精確,靠近邊界的異常觀測,可能其實是正常的。

    這在實務上的代價很具體。我做製造和風控時都遇過:誤報一多,現場就不信任。警示響十次有八次是誤會,第九次就沒人看了。門檻設在哪裡,最後是業務決策:你願意為了多抓一個老千,去打擾多少個正常玩家。

    所以偵測系統的輸出,是一張「值得調查的名單」;判決要等調查。從名單到認定作弊,中間要有人工調查補上證據。GGPoker、888poker、WPT Global 公開的處置,都是調查之後的封號與退款,這一步省不掉。

    邊界二:對手會模仿人類節奏,模型必須靠人工調查回饋持續重訓

    第二個邊界在圖 2 右邊,也寫在同一篇綜述裡:當異常來自惡意行為,對手會調整自己,讓異常看起來正常。

    自動化帳號的作者也看得到平台的公告。今天平台說「太一致會被抓」,明天的程式就會加入隨機的停頓、刻意的失誤、合理的在線時間。

    我在風控專案裡最深的體會之一就是這個:對手會適應,模型會過期。詐騙的方式改了,上個月有效的特徵這個月就失效;模型要持續重訓,也要監控它抓到的東西是不是越來越少。

    這也是為什麼規則和模型必須並存。規則好解釋、上線快,新手法一確認,當天就能補一條;模型抓沒見過的組合,但需要時間累積資料。兩者分工,再加上人工調查把新案例回饋回去,才是會跟著對手一起變的系統。

    結語:從賭場抓老千到銀行防盜刷,守住風控靠的是「三層篩選+調查回饋」閉環

    把賭場拿掉,這套邏輯幾乎原封不動地出現在別的地方:

    它們共用同一組條件:標籤少、正常行為會變、對手會適應、誤報有代價。差別只在誤報的代價由誰承擔。

    賭場抓老千,看的是一個人像不像自己、像不像人。

    AI 讓作弊變便宜,也讓「像人」越來越容易偽造。偵測方能守住的,是一套會更新的流程:三層篩選、人工判定、結果回饋。少了任何一段,系統都只會越來越準確地抓錯人。

    如果想看異常基準線在真實事故裡少了會怎樣,可以接著讀〈工廠邊緣設備被植入挖礦木馬怎麼辦?真實入侵復盤+AI Coding 資安做法(2026)〉。

    方法與限制

    • 實驗為模擬資料,三個特徵與各群分布都是作者設定,目的是說明機制,不代表任何真實平台的資料或偵測效果。
    • 「偽裝程度」只改決策節奏與在線時數,不改勝率;真實的對手可能同時調整更多面向。
    • 三種偵測方式拿到相同的警示名額(2%);名額改變,結果也會改變。基準線只和全體比,沒有和帳號自己的過去比。完整程式碼列在「模擬實驗驗證:不偽裝時基準線已抓到 97.8%,對手開始偽裝才需要行為模型」一節,照順序貼進同一個檔案即可重現圖 2 的數字。

    常見問題

    什麼是異常偵測(anomaly detection)?

    找出不符合預期正常行為的模式,這是 Chandola 等人 2009 年綜述的定義。重心在「正常」:你列不出所有作弊或詐騙手法,但能描述正常的樣子,再把離正常太遠的挑出來。銀行抓盜刷、電商抓假帳號、工廠抓設備異常,用的都是同一套邏輯。

    Isolation Forest(孤立森林)是什麼?

    一種異常偵測方法:隨機切資料,越容易被單獨切出來的點,越可能是異常。2008 年提出它的論文指出,訓練資料裡完全沒有異常樣本時它也能運作,正好對上標籤幾乎沒有的現實。它看的是特徵組合,幾個「有點怪」加在一起就會被切出來。

    沒有標籤,怎麼評估異常偵測模型?

    一開始先把已知形態的異常注入正常資料,看抓回幾成,但只量得到想像得到的異常。人工調查開始確認案例後,看 precision@k:送去調查的 k 件裡有幾件是真的;也能拿確認過的案例,只用當時拿得到的資料重跑回測。確認案例累積後,不平衡的資料優先看 precision-recall 曲線。

    被異常偵測標記,就代表作弊嗎?

    不代表。偵測系統輸出的是一張值得調查的名單,判決要等人工調查補上證據。行為不常見的真人,例如打得特別久、節奏特別穩,也會被標記;誤報一多,現場就不再信任警示。門檻設在哪裡,最後是業務決策:願意為多抓一個老千,打擾多少個正常玩家。

    延伸閱讀

    參考資料

    留言0

    登入後就能留言。

    登入
    sunny 桑尼
    sunny 桑尼

    AI 資料科學 · 產品經理 · 蒙奇 D 桑尼

    專注於 AI 工具應用與資料科學教育,致力於讓每個人都能用 AI 提升工作效率。曾任職於科技業,現為全職教育創作者。

    讀更多文章 →想自己動手試?領免費 Starter Kit →