Menu
CoddyTech

異常スコア

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 37/51。

はいかいいえだけでは、行がどれほど異常なのかがわかりません。score_samplesは各行にスコアを付けます。スコアが低いほど、より異常です。薬局の処方箋の場合:

forest = IsolationForest(random_state=0).fit(X)
rx["score"] = forest.score_samples(X)
print(rx.sort_values("score").head(3))

最も異常な3件が表示されます:

     pills  refills  price     score
17     300        0  120.0 -0.881478
88      28       11   11.5 -0.708524
120     30        1   64.0 -0.700620

150件の処方箋の異常スコアのヒストグラム:ほとんどは-0.55から-0.35の間にあり、少数は左側の-0.88まで伸び、-0.6に赤い破線のしきい値があり、確認対象は4件

どこで区切るかは自分で決められます。人は何行まで確認できるでしょうか?順位付けするには並べ替え、しきい値と比較してフラグを付けます。

challenge icon

チャレンジ

中級

監査担当者が確認できる経費申請はごくわずかです。スターターコードはIsolation Forestを学習させ、プログラムはnとしきい値を読み込みます。

  1. すべての申請をスコアリングし、新しい列scoreに格納します。
  2. 以下のように、最も異常な申請をn件、異常度の高い順に出力します。
  3. スコアがしきい値を下回る申請の件数を出力します。

別の会社の場合、2と-0.6を入力します。

Most unusual claims:
  C003: 1960 EUR, score -0.763
  C040: 80 EUR, score -0.757
Below -0.6: 6 claims

自分で試してみよう

import pandas as pd
from sklearn.ensemble import IsolationForest

# 経費申請1件につき1行:金額、領収書、申請時刻、出張後の経過日数
claims = pd.read_csv("claims.csv")
X = claims[["amount_eur", "items", "hour", "days_late"]]
n = int(input())
threshold = float(input())

# Isolation Forestによるもの:すべての申請データで学習済みのforest
forest = IsolationForest(random_state=0).fit(X)

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ