Coursera 機械学習コースを修了 & MackerelでAnomaly Detection

はてな社内での勉強会で、Courseraの機械学習コース( https://www.coursera.org/learn/machine-learning/home/welcome )を皆で履修するというのを去年秋に始めていました。

developer.hatenastaff.com

前回は途中脱落してしまったのですが、気をとりなおして年明けからのコースでは無事に修了しました。(スコア100%になってますが復習がてら間違ったQuizやりなおしたりしてます。)

このコースの良さは各所で語られていますので、個人的な所感のみを書いておきます。

  • 日本語字幕もあるけど、英語で頑張ったほうがいいんじゃないか
    • 機械学習系は新しい情報も多いので英語の用語に慣れておいたほうが、後々応用が利きそう
    • 他のコースは日本語字幕ついていないことも多いので、英語での講義に慣れることができるのも良い
  • Octaveでのコーディングも悪くない
    • ベクトルや行列での計算が一発で決まるので大変気持ち良し、行列やベクトルを意識できたのは良かった
    • あと通常のforループによる実装だとマルチコアへの最適化も大変だけど、行列計算で書ければマルチコアでの並列化が処理系側だけでできる(このあたり通常はよくできた実装のライブラリを使うのが通常だろうけれど)

ちなみにはてな社内でも徐々に修了者が増えていて、おそらくいま7名ぐらいがコース終わっていそうです。

blog.sushi.money hakobe932.hatenablog.com

また来週( 4/18 )から新しいコースが始まるので、是非トライしてみてはいかがでしょう。

MackerelでAnomaly Detection

ということで、せっかくなのでちょっと試してみました。Weekly 9のAnormaly Detacionの応用です。

例えば、サービスの応答時間が悪化してアラートが発生した時に、根本原因を探るために各サーバーのCPUやミドルェアの各メトリックを見ながら、似たような異常を示しているグラフを探すことはよくあります。現状だとこのような探索は基本、職人芸になっていると思いますし、原因となっているグラフをいかに早く探し出せるかがノウハウの一つになっていると思います。

Anomaly Detectionというのは、このような探索を自動化しようという話で、Mackerelのメトリックを対象に実装してみました。

具体的な動作としては、次の通りとなります。

  • Mackerelの対象サービスと障害発生時間帯を指定するして起動
  • そのサービスに含まれる各ホストのメトリックを対象時間帯とその前の平常な時間帯にわたって取得する
  • 平常な時間帯のメトリックから微分計算及び、Gaussian Distributionを計算
  • 対象時間帯のメトリックの各データポイントから外れ度合いを計算
  • 外れ度合いの大きい順に各メトリックの埋め込みグラフ一覧をhtmlとして出力

実行結果のhtmlを開くと下のスクリーンショットのようにあやしい順にグラフがずらずらと並んでいる様子が見れます。

スクリプトはもうちょっと良くしたいですね。できればMackerel本体にも組み込んでいきたいです。

gist.github.com