OKIYUKI99 Blog

データ分析や日常に関するブログ

Slackを通じて正解ラベルデータを集める

分析の精度を高めるために、正解ラベルを集めるコストはなんだかんだ大きいです。

よくある話ですと、がんばってラベル付けしたデータから学習したモデルをデプロイし、日々送られてくるデータのラベルを推論します。そして、予測スコアがある閾値を超えたら、Slackに通知する(「スコア ~~ で、異常が検知されました」など)サービスを考えます。 そのSlackの通知をラベル付けを担当する人が見て、「うーん、これは誤判定だな。」とか「おお、これは異常だ!すぐにエスカレしなければ!!」と判断します。

このとき、その判断した結果をすぐにデータ化(ラベリング)する仕組みがあると、最新データで継続的にモデルの学習を行うことができ、性能をアップデートするのに非常に役立ちます。

そこで、SlackにInteractive Button付きのメッセージを投げて、ラベル付けを担当する人がボタンをクリックすることで、データ化する仕組みをPythonで作りました。

github.com

通知のイメージは以下のとおりです。

f:id:gingi99:20181202225504p:plain

実装は、コードのとおりですが簡単に言うと、

  • APIサーバをFlaskで立てる
  • 通知がほしいときに、/postを叩き指定のチャネルにInteractive Button付きのメッセージを通知させる
  • ボタンのクリック結果を、通知したメッセージのリプライで返す。その中で、データ化する処理も別途書けばOK
    • このデータ化する処理Githubの方には書いていませんが、例えば、推論に使用したデータを保存しているデータベースのテーブルにインサートしていくとかです。

Slackアプリ、まともに作ったのは初でしたが、形にできるまで楽しかったです。Slackを通じてボタンクリックだけからチャートを作る仕組みも考え中…

参考