Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実績データで異常検知できる 「Random Cut Forest」 ハイパーパラメーター設定の実際/how-to-set-the-hyper-params-for-random-cut-forest-anomaly-detection

実績データで異常検知できる 「Random Cut Forest」 ハイパーパラメーター設定の実際/how-to-set-the-hyper-params-for-random-cut-forest-anomaly-detection

2022/10/8 JAWS DAYS 2022 / https://jawsdays2022.jaws-ug.jp/ の発表資料

Kohei "Max" MATSUSHITA

October 08, 2022
Tweet

More Decks by Kohei "Max" MATSUSHITA

Other Decks in Technology

Transcript

  1. 実績データで異常検知できる
    「Random Cut Forest」
    ハイパーパラメーター設定の実際
    JAWS-UG IoT 専門支部 / 松下享平 “Max”

    View Slide

  2. 自己紹介
    株式会社ソラコム
    テクノロジー・エバンジェリスト
    松下享平 (まつした こうへい) "Max“
    講演回数 500超/累計
    保有スライド 1万枚超 (もはやわからん)
    JAWS-UG IoT 専門支部
    AWS ヒーロー (IoT 部門、2020年)
    好きな言葉「論より、コード」
    好きな AWS サービス
    • AWS IoT Core
    • AWS IoT Events
    • Amazon Ember font family
    @ma2shita
    お気軽にフォローを!
    仲良くしてね (^^
    #jawsdays2022
    #jawsdays2022_C
    #jawsug
    #Maxデテル

    View Slide

  3. Random Cut Forest
    異常検出と予測に使える ML アルゴリズム

    View Slide

  4. 今日のゴール
    機械学習で不可避な「ハイパーパラメーター」の設定を
    実データから見出そう
    http://proceedings.mlr.press/v48/guha16.pdf
    numberOfTrees = ?
    subSampleSize = ?
    timeDecay = ?
    shingleSize = ?
    numberOfTrees = !
    subSampleSize = !
    timeDecay = !
    shingleSize = !

    View Slide

  5. Random Cut Forest (RCF) …??
    http://proceedings.mlr.press/v48/guha16.pdf

    View Slide

  6. Random Cut Forest (RCF)
    RCF を使用して異常を検出する方法
    https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/how-does-rcf-detect-anomalies.html
    スコアが最近のポイントと大幅に異なる場合、
    データポイントを異常と識別します。
    教師なし
    《 実績データが使える 》
    機械学習(ML)
    アルゴリズムの
    1つ

    View Slide

  7. どこが “異常” ?

    View Slide

  8. どこが “異常” ?

    View Slide

  9. 異常検知でわかること

    View Slide

  10. ルールベースでも良いのでは?
    if -20 < genba_no_temp < 40:
    print "よしっ!"
    else:
    print "異常!"
    夏と冬では?
    福岡と札幌では?
    定義が複雑に
    明らかに判断できることに
    利用する

    View Slide

  11. RCF は、どのようなデータに適用可能?
    特定の範囲 周期性
    《共通》
    時系列データ

    View Slide

  12. RCF に必要な2つのもの
    最近のポイントと異なる データポイントを異常と識別
    比較元のデータ “異常” の定義
    1 2
    実績データが使える
    スコアが算出される
    決めるのはあなた

    View Slide

  13. どういうことか?見てみよう
    《ライブデモ》
    AWS Cloud
    Amazon Kinesis Data Analytics
    Amazon Kinesis Data Streams
    AWS CLI

    View Slide

  14. 0
    0.5
    1
    1.5
    2
    2.5
    3
    0
    5
    10
    15
    20
    25
    30
    35
    40
    temp score
    ここは
    あなたが
    決める
    異常
    正常

    View Slide

  15. ここまでのまとめ
    Random Cut Forest (RCF) は 教師なしの ML アルゴリズム
    ➢ データ毎の条件調整が不要、実績データを基に始められる手軽さ
    時系列データを対象に、範囲や周期性のあるデータでも異常検知ができる
    ➢ 適用できる範囲が広い
    Anomaly Score が算出される
    ➢ あの “異常” を決めるのは、あなた

    View Slide

  16. CREATE OR REPLACE PUMP "ANORMALY_DETECTION_PUMP" AS INSERT INTO "TEMP_STREAM_001"
    SELECT STREAM "temp", "ANOMALY_SCORE", "ANOMALY_EXPLANATION" FROM
    TABLE(RANDOM_CUT_FOREST_WITH_EXPLANATION (
    CURSOR(SELECT STREAM * FROM "SOURCE_SQL_STREAM_001"), 100, 10, 100000, 1, TRUE
    ));
    numberOfTrees = 100
    subSampleSize = 10
    timeDecay = 100000
    shingleSize = 1
    RCF のハイパーパラメーター
    … 精度
    … Anomaly Score が算出され始める件数
    … 見比べる対象 “最近のポイント” 数
    … データ重複への考慮具合
    注) 程度の解釈で

    View Slide

  17. データ件数と相談したいのが
    `subSampleSize`
    subSampleSize のデフォルトは 256
    = 257件目のデータから Anomaly Score が算出される
    ➢ 小さくすれば、早く結果が得られる (例: 10 → 11 件目から)
    • 精度とのトレードオフ
    持っているデータの件数と
    これから発生するデータ件数(の見積)
    から決定

    View Slide

  18. (残りの) RCF のハイパーパラメーター
    numberOfTrees = 100
    subSampleSize = 10
    timeDecay = 100000
    shingleSize = 1
    … 精度
    … Anomaly Score が算出され始める件数
    … 見比べる対象 “最近のポイント” 数
    … データ重複への考慮具合
    注) 程度の解釈で
    CREATE OR REPLACE PUMP "ANORMALY_DETECTION_PUMP" AS INSERT INTO "TEMP_STREAM_001"
    SELECT STREAM "temp", "ANOMALY_SCORE", "ANOMALY_EXPLANATION" FROM
    TABLE(RANDOM_CUT_FOREST_WITH_EXPLANATION (
    CURSOR(SELECT STREAM * FROM "SOURCE_SQL_STREAM_001"), 100, 10, 100000, 1, TRUE
    ));

    View Slide

  19. “特定の範囲” が対象なら
    残りはデフォルトで大丈夫そう
    numberOfTrees = 100
    subSampleSize = 10
    timeDecay = 100000
    shingleSize = 1
    … 精度
    … Anomaly Score が算出され始める件数
    … 見比べる対象 “最近のポイント” 数
    … データ重複への考慮具合
    注) 程度の解釈で

    View Slide

  20. 周期性のデータを対象にするなら
    `shingleSize` も調整 shingle = 屋根板
    「重なってる様子」
    0 6 10 10 6 0 -6 -10 -10 -6 0 6 10 10 6 0 -6 -10 -10 -6

    View Slide

  21. 周期性のデータを対象にするなら
    `shingleSize` も調整 shingle = 屋根板
    「重なってる様子」
    0 6 10 10 6 0 -6 -10 -10 -6 0 6 10 10 6 0 -6 -10 -10 -6
    例) shingleSize = 4
    0 6 10 10 6 0 -6 -10 -10 -6
    6 10 10 6 0 -6 -10 -10 -6 0
    10 10 6 0 -6 -10 -10 -6 0 6
    10 6 0 -6 -10 -10 -6 0 6 10
    0 6 10 10 6 0 -6 -10 -10 -6
    6 10 10 6 0 -6 -10 -10 -6
    10 10 6 0 -6 -10 -10 -6
    10 6 0 -6 -10 -10 -6
    1
    2
    3
    4
    “重なり合い” を考慮した比較をしてくれる 注) 程度の解釈で

    View Slide

  22. 《手軽に試す方法》
    import rrcf
    https://github.com/kLabUM/rrcf
    Robust Random Cut Forest の Python 実装

    View Slide

  23. https://aws.amazon.com/jp/blogs/news/use-the-built-in-amazon-sagemaker-random-cut-forest-algorithm-for-anomaly-detection/
    [1] Sudipto Guha, Nina Mishra, Gourav Roy, and Okke Schrijvers. “Robust random cut forest based anomaly
    detection on streams.” In International Conference on Machine Learning, pp. 2712-2721. 2016.

    View Slide

  24. どういうことか?見てみよう
    《ライブデモ》
    python3 rrcf-demo-run.py
    Gist
    準備
    python3 -m venv rrcf-demo
    cd !$
    source bin/activate
    pip install numpy matplotlib rrcf

    View Slide

  25. ここまでのまとめ
    Random Cut Forest (RCF) のハイパーパラメーターは、以下の要素で設定
    ➢ データ件数で「subSampleSize」
    ➢ 周期性のデータが対象なら、さらに「shingleSize」
    ➢ あとは、まずデフォルトを採用
    RCF の挙動はローカルでも確認できる
    ➢ import rrcf
    ➢ ※ timeDecay 等のパラメーターの有無があるため、
    あくまでも挙動確認用

    View Slide

  26. RCF が使える AWS サービス
    Amazon Kinesis Data Analytics Amazon QuickSight
    Amazon SageMaker
    Amazon OpenSearch Service
    ※たぶんすべてカバー

    View Slide

  27. どうやって
    データを入れる?

    View Slide

  28. データ投入の方法
    aws kinesis put-record --stream-name ST --partition-key 123 --data '{"temp":25.0}'
    AWS CLI
    CLI や SDK に頼らず、HTTP POST したい…?
    curl -H JSON -d '{"temp":25.0}' funnel.soracom.io
    IoT な マイコンからも Amazon Kinesis Data Streams が使える
    詳しくは「SORACOM Funnel」で検索

    View Slide

  29. AWS Cloud
    HTTP POST を利用した
    IoT データ収集アーキテクチャー例
    Amazon Kinesis Data Analytics
    Amazon Kinesis Data Streams
    《クラウドアダプタ》
    SORACOM Funnel
    IoT デバイス
    HTTP POST
    TCP/UDP

    View Slide

  30. おしまい
    ✓ Random Cut Forest は、即戦力な異常検知アルゴリズム
    ✓ データとパラメータを確認しながら試せる
    謝辞と宣伝:
    • いろんなドキュメントに助けられた、まじありがとう!
    • こんな素敵なイベントに出られてうれしいよ、まじありがとう!
    • AWS Dev Day に出るよ!
    IoTの楽しさをライブデモで!AWSとラズパイで「作らずに創る」IoTのハジメ
    • AWS re:Invent 2022 行くよ!

    View Slide

  31. 参考資料
    • RCF を使用して異常を検出する方法
    • 例: データ異常の検出と説明の取得 (RANDOM_CUT_FOREST_WITH_EXPLATION 関数)
    • RCF の仕組み
    • 異常検出にビルトイン Amazon SageMaker Random Cut Forest アルゴリズムを使用する
    • kLabUM/rrcf: 🌲 Implementation of the Robust Random Cut Forest algorithm for anomaly
    detection on streams
    • 異常検知の世界へようこそ
    • Amazon SageMakerで産業用機械の温度データから異常値を検出してみた
    • Amazon SageMakerのRandom Cut Forestで異常検知をする(shingling処理の検証)
    • IoTデータの異常検知をAmazon Kinesis Data Analyticsで行うアーキテクチャー

    View Slide

  32. SORACOM の願い
    クラウド ⇒ 多くの Web サービス
    SORACOM ⇒ 多くの IoT システム
    日本から、世界から、たくさんの
    IoT プレイヤーが生まれますように

    View Slide

  33. Random Cut Forest の話でした!
    #jawsdays2022
    #jawsdays2022_C
    #jawsug
    #Maxデテル
    @ma2shita
    お気軽にフォローを!
    仲良くしてね (^^

    View Slide