異常スコア
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どこで区切るかは自分で決められます。人は何行まで確認できるでしょうか?順位付けするには並べ替え、しきい値と比較してフラグを付けます。
チャレンジ
中級監査担当者が確認できる経費申請はごくわずかです。スターターコードはIsolation Forestを学習させ、プログラムはnとしきい値を読み込みます。
- すべての申請をスコアリングし、新しい列
scoreに格納します。 - 以下のように、最も異常な申請を
n件、異常度の高い順に出力します。 - スコアがしきい値を下回る申請の件数を出力します。
別の会社の場合、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)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ