nend・nex8のエンジニア・技術ブログ2018-08-21クリック数の異常検知こんにちは、株式会社ファンコミュニケーションズで8月6日から8月10日までインターンをしていた桐畑です。クリック数の異常からシステムなどの異常を検知できないかというインターンをやったので、それについてとインターンの感想などを書いていこうと思います。ブログはほとんど書いたことがないので、読みづらいかもしれませんが、ご了承ください。ことを異常検知と言います。テレビに出て、知名度が急激に上がったなど今回はあまりそれぞれを区別せずに異常なものをなんでも検知しようという試みでした。アプローチとしては、機械学習的なアプローチと統計学的なアプローチがあり、今回は統計学的アプローチを用いました。細かい手法は以下を参考にしました。結果0時の日付が変わるタイミングでのスパイクを除けば、検知したい4つの異常のうち3つを見つけることが出来ました。3/4ということになります。スパイクは以下のようなもので、これと異常値を区別するのが物凄く大変でした。最終的にもあまり出来ていないです。0時にクリック数が急激に多くなるのは、漫画アプリとか色々なアプリのポイントなどの更新が0時だからなのかなと思ってます。実際にやったことFacebookのProphetというライブラリを使ってモデルを組んで、残差が大きいところを異常とみなしました。良くデータにfitしているモデルを組むことが重要です。Prophetでは、という式でモデルを推定します。g(t):トレンドを表す関数h(t):周期性を表す関数,s(t):イベントの効果を表す関数:誤差項クロスバリデーションなんかで変数選択をして誤差を見てみるとこんな感じになりました。yが実際の値(Box-Cox変換はしている)、yhatが推定値、residualが残差です。異常なところで誤差が大きくなりました。スパイクのときと区別がつきにくいです。1次の自己相関を入れていたせいで、異常な値をすぐに補正してしまっているのだと思い、1次の自己相関の項のみ移動平均で平滑化してみました。すると、スパイクと異常部で残差の連続度に違いが出ました。残差が大きいところが連続するかどうかで異常を判定するとそこそこ上手くいきました。スパイクの影響はまだまだ出ているので、その辺は今後の課題かなと思います。あと、長い期間の異常も見つけられなかったので、それはどうしたらいいか時間がある時にでも考えてみようと思います。感想インターンをするのは初めてなので、他のところとは比べられないですが、全体的に来てよかったなと思います。良かったなと思ったところを2つ紹介したいと思います。1つ目は、会社がすごく自由だったところです。僕は結構縛られるのが嫌なので、好き勝手やらして欲しいタイプなのですが、本当に好き勝手やらせてくれたので、すごくやりやすかったです。時系列の研究をしているので、それに関係する内容をやらせてもらえたし、やり方も特に指定されずにやらせてもらえたので、色々知識がついて良かったです。2つ目は、データサイエンティストの仕事がどんなものか知れたことです。データサイエンティストという名前は良く聞くのですが、業務としてどのようなことをやっているのか謎だったので、それが一部でも知れたことは良かったなと思います。データをひたすら眺めて、おかしなところを探すのは凄く大変でしたが、いい経験でした。スパイクに苦しめられた時は大変だなと思いましたが、全体的には楽しくて、色々な経験が出来たインターンだったなと思います。ありがとうございました。終えてどうも、僕です。え?知らない?それはそう。Are青山のアドテク会社。アドネットワークやDSPを開発・運用。サーバを止めてみたよ。インターン:実業務体験編インターンでCTR予測をしましたSearchArchiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。