OKIYUKI99 Blog

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

CHI 2019 : When Do People Trust Their Social Groups ? を読んだ

Facebook のグループ機能に関するデータ解析の論文を最近読みました

自分的要約

  • Facebookのモチベーションとしては、ユーザが安心して使うための信頼できるグループを増やしたい。じゃあ信頼できるグループってどんなのか?から入る
  • グループを使用している10,000人のFacebookユーザをサンプリングし、アンケートを行う。妥当な回答を得た6,383人を対象に分析を行う
  • アンケートとは、ユーザ自体の他人への態度(他人を信頼することができる気質かどうかなど)に関するアンケートと使っているグループでの態度に関するアンケートを実施し、グループの信頼スコアを定め、定量的に分析する
  • これらのアンケートにより得られたデータとFacebook保有する観測データから構成される特徴量をもとに、信頼スコアを予測する回帰モデルを作り、何が信頼に効くかを評価する
  • 結果的には、(1)個人の態度は重要、(2)グループのサイズが小さくて、昔から使われてて、均質的なグループが重要 (3)グループ内の人のネットワーク構造は重要であることを示した
  • 得られた結果を使って、Facebookプラットフォーマーの立場として、信頼できるグループ作りに役立てる

以下は、論文の流れにそってつらつらと説明する。

背景知識

  • グループの中での信頼関係というのは、メンバーの満足度もあがるし、メンバーのパフォーマンスも上がるし、対立も減らせるし、良いことづくめ(当たり前なんだがきちんと参考論文を引用しているのがすごい)
  • Facebookでは、14億人がGroupを毎月使っている
  • 関連研究では、個人の一般的な他人を信頼するかの傾向が、特定のグループにおける信頼に影響すると言っている。グループといっても構成される人によるという話。
  • 一般的には、ダンバー数150を超えると、認知限界がきて維持が難しくなる(らしい)

過去の研究サーベイがかなり充実していたので、また興味があるときに読むと良さそうです。

データとサーベイ

まずユーザは以下のようにサンプリングしている

  • グループをアクティブに使っているUSの10,000人をサンプリング
  • グループは5人以上のグループでかつ、28日間に1つ以上の何らかのやり取りが観測されたものを使っている
    • 多少のサンプリングバイアス(性別や年齢)が入ってしまったらしい

これらのユーザにサーベイ(アンケート)を広告経由で招待して実施。大項目としては、(1) 個人の他人への態度 と (2) 所属しているグループがどれだけ信頼できるかを質問している。 質問内容は下記の表のとおり。ざっくりいうと、人を信頼する派か?リスクを取るタイプか?など。どうやら、World Value Surveyという何か標準化されているものを使って質問を作ったらしい。こういうのいつか参考になるかもしれない。5段階のリッカート尺度で回答してデータを集める。

f:id:gingi99:20190608213428p:plain

(ちなみに、個人に関する情報やグループ内のポストはすべて匿名化されており、このサーベイを実施ことも厳しく監査されてる様子)

別途、グループはどういうタイプのものが多いかもアンケートを取っている。カテゴリは以前Facebookが調査したものを使っている。結果としては、89%が以下の5つのグループに該当するらしい

• Close friends and family (e.g., extended family) -> 20%

• Education/Work/Professional (e.g., college, job)

• Interest-based (e.g., hobby, book club, sports) -> 34%

• Lifestyle/Identity-based (e.g., health, faith, parenting)

• Location-based (e.g., neighborhood/local organization)

アプローチ

  • アンケートデータと行動ログ(like数や使用時間など)を特徴量として使う
  • 10,000人からアンケートが妥当でかつ、行動ログと合わない人などを除いて、6,383人までデータをサンプルを落としている
  • 手法は、オーソドックスに重回帰分析とランダムフォレストとロジスティク回帰を使っている。特徴量の追加を繰り返すことで、決定係数の改善幅を見ていくスタイル

結果

Resultsの章はかなり事細かく記載している。CHI論文らしい感じ。

アンケート項目の基本統計量やアンケート間の相関値を確認する(Table 2)と、グループに対するアンケート(下表)は高い相関を示していることがわかる。

f:id:gingi99:20190608224708p:plain

その結果を踏まえて、目的変数となるグループの信頼スコアは、グループに関する4つのアンケート内容のスコアの平均値として使う(といっても、あとから別々にも評価している)

まず、「個人の他人への態度」についてのアンケートの特徴量だけで予測できるかをやってみる。Table 3が結果。

f:id:gingi99:20190608225005p:plain

結果をみると、「個人の他人への態度」についてのアンケートの特徴量全部入りで決定係数0.14まで上昇している。そもそも性格的に人を信じるタイプかどうかということだろうか。

ここから、Facebookお手製の特徴量をどんどん入れて決定係数を改善していく。それらの特徴量をまとめているのが、Table 4。

f:id:gingi99:20190608225556p:plain

まず1つ目のグループに関する基本的な特徴量を入れると、決定係数が0.08増加したと報告している。

最も効いた特徴量はグループサイズ。それと、グループがPublicかPrivate(FacebookでいうSecretとClose Group)であること。グループサイズは多きすぎる知らない人増えそうだし、PrivateグループはPublicよりは見られないからある程度の安心はあるよねと納得できる。

これらの特徴量で信頼スコアがどう変わるか図示したのが下の図(Figure 1)。

f:id:gingi99:20190608225736p:plain

disposition to trust (信頼への気質)によって、信頼スコアの低下の傾きの大きさが違う結果を示していた。この値が低い人ほど、大きく降下していくことを示している。この結果がでても、個人の気質はコントロールできないし、どうして制御するのかは難しい問題である

2つ目にグループのカテゴリに関する特徴量を入れる。

グループの5つのカテゴリの各信頼スコアをみてみる(Figure 2)と「Close friends and family」が高い結果が出ていて、直感的にも正しい。このようなグループカテゴリを特徴量としていれると、決定係数が0.05増加したと報告している。

f:id:gingi99:20190609105617p:plain

3つ目にグループのアクティブ度合い。

サーベイに使った28日間のグループ内でのアクティビティ(滞在時間、投稿数、Likeの数、コメント数など)の平均値を特徴として入れると、決定係数が0.04増加したらと報告している。グループ内での交流が盛んなほど信頼できるグループだよねという直感的にも正しい。

4つ目にHomogeneityとhomophily の特徴量を入れる。

Homogeneity(均一性)は、グループ内に所属する人が互いにどれだけ似ているかを測る。論文では、性別のエントロピーや年齢の標準偏差を計算している。homophily (同類性)は個々の人がグループ内の他人にどれだけ似ているかを測る。論文では、性別や年齢をビン化した距離のアプローチを使っている。

これらを特徴としていれたが、あまり改善はなかったと報告している。性別や年齢がバラけていても、信頼スコアには寄与しないのは、家族グループとかは完全にそうだしなーという感想なのでそう言われたらそうな気もします。

最後の5つ目の特徴量として、Network structureの特徴量を入れる。

これはいろいろと工夫した5種類ほどの特徴量があり、Network density(グループ内のメンバー間で友達となっている数の合計を全組み合わせ数で割った数)やpaticular degree centrality(メンバーが持っている友達の数をグループサイズで正規化したもの)など。このNetwork特徴が最も決定係数を改善していて、決定係数を0.10も改善したと報告している。だれもお互いに知らない素なグループよりは、密にあるほうが良いというのは直感的であるが、一番効くというのは驚いた。

最終的にすべての特徴量を入れて、決定係数が0.26、MSEが0.53まで精度をあげている。さらに追加実験で、観測データのみ(アンケートデータは使わずに)でモデルを組んだところ、決定係数が0.15、MSEが0.59になったと報告している。アンケートデータは将来に渡って使えるとは限らないので、こういうふうにロバスト性をチェックするやり方はとても良い。

Figure 4に各特徴量の重要度をまとめている。重要度は計算したい特徴量を抜いて、MSEがどれだけ悪くなってしまうかの比率で定義している。Network Structureの特徴を抜くと、22%も悪くなってしまうことがわかる。こういう可視化わかりやすいと思うので、機会があったらやってみたい。

f:id:gingi99:20190609160118p:plain

アンケートをとってから28日後までに、グループのメンバーサイズやつながりの数が変化があったかをグループの信頼スコア別に評価している。 面白いのは、信頼スコアの高いグループほど、メンバーサイズが増加していないことがわかる。(Figure 5の左) これは、メンバーサイズの増加率が停滞してくることが、信頼スコアにおいては良いグループになってくることを示唆している。こういうのが定量的に現れるのは面白い。

f:id:gingi99:20190609162317p:plain

最終的に、得られた結果をFacebookがどう活かすが最後に述べられている。

  • プラットフォーマーとしての立場として、Group Adminに信頼スコアを提供するなどを考えている。
  • グループの推薦ロジックの改善に役立てる
    • グループサイズに応じたり、個人の信頼への気質でロジックを変更できるだろうと考えている
  • グループ内の知り合いを探しやすくして、友達のつながりを増やすことなど

感想

個人的には人間の潜在的な心理状態は、サービス提供社が保有するログだけからじゃわからないけど、アンケートも加えると、そのログにラベルが付いた状態で解析できる分、掛け算効果でログの情報量が増える印象。何より分析が面白くなる。このような理想的なストーリーはいつも頭に入れておこうと思う。

2019GWにやったこと

ただのGW記です。令和になったGWは10連休ということでしたが、お互いの実家に帰省。息子と遊んだりでのんびり過ごしました。

GWは普段とは異なるインプットをしようと思い、気になってた本を読んだり、Webサーフィンして調べものをしていました。全体的にキャリアや組織論に関することを調べていました。

以下は読んだ本や参考になった記事。

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

これまでのキャリアを振り返ると、データ分析周りでエンジニア、リサーチャー、データサイエンティストというロールで仕事をしてきましたが、個の競合優位性を高めるために、次に何をプラスしようかと考えていました。 この本は下のSOFT SKILLSの著者ジョン・ソンメズの2018年に出た本です。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

20万語を超える本なので、全部読むのではなく、気になった部・章だけ読めるように設計されています。自分は5章のキャリアの進め方を中心に読みました。

スペシャリストとゼネラリスト論できっぱり言い切ってくれている箇所があり、気に入っています。

ソフトウェア開発者の多くは、すべてのスペシャリストがゼネラリストでもあるのに対し、ゼネラリストは決してスペシャリストではない

自分の分野全体についての一般的な知識の広い裾野ができてなければ、優れたスペシャリストになることは非常に難しい

また、スペシャリストを目指すときの選択肢としても、スモールスタートで特定の言語のフレームワークやライブラリの専門家を目指すようなイメージを勧めています。

大きすぎる専門分野を選ぶくらいなら、小さすぎて特殊すぎるものを選ぶようにしよう

サイドプロジェクトをしようという話もおもしろかった。

ソフトウェア開発者としてのキャリアを伸ばす最良の方法は間違いなくサイドプロジェクトだ。

まず第一にどんなサイドプロジェクトを手がける場合でも、そこから大きくなくても収益を上げる方法を考えることをお勧めする

これまでサイドビジネスとして、趣味でもあるボードゲームの制作を行い、サークルとしてピクテルを制作したり、海外版Imagineを流通させてきましたが、そろそろ別のサイドプロジェクトを持つことを考えるきっかけになりました。

bodoge.hoobby.net

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング

前々から評判のよかった本を読めました。たしかに前評判どおりの内容の濃さでした。

特に社会学者の話で、「社会人はコミュ力大事!」という理由もなく通説になっていることを3つの不確実性(他者理解の不確実性・伝達の不確実性・成果の不確実性)に分解しているのを見たときに、「あーこれでコミュ力なんで大事かがやっと人にきれいに説明できる」と思いました。

というふうに気づきの多い本でした。何度か読んで、脳に刷り込んでいきたいです。

岩波データサイエンス Vol.3

岩波データサイエンス Vol.3

岩波データサイエンス Vol.3

もはやX周回遅れ感がありますが、今のチームメンバーの分析思考のなかに、因果推論の基本事項がデフォルトインストールされている感じがしていたので、そろそろ議論の中でその視点から価値出せるコメントができるようにと思い、精読しました。 傾向スコアの強力さは複雑な共変量を1次元に落とし込むシンプルさと説明力だと解釈できたり、差の差法やABテストの操作変数からの見方がやっと腑に落ちたので、がんがん使っていきたいと思います。

ワーク・ルールズ!

ワーク・ルールズ!―君の生き方とリーダーシップを変える

ワーク・ルールズ!―君の生き方とリーダーシップを変える

これも周回遅れ感があるが、Hontoライブラリに眠っていたのを読んだ。が、特に今となっては何か新しい視座を得ることはそこまでなかったので、流し読みしました。また組織論をキャッチアップしたいときにいずれ戻ることはあると思います。

プロダクトマネージャーとか

キャリアの話の続きで、データ分析周りしてて、ゆくゆくはプロダクトマネージャーのキャリアもあり得るだろうなと考えていて、以下の記事がわかりやすかった。中のリンクも読んで、自分に足りてなそうな視点を拾っていきました。

findy-code.io

プロダクトマネージャーは特にビジョナリーが大事なのは強調されているが、UXデザインの知識も必要であることが気になりました。大学時代に認知心理学とかを学んで以来、知識がストップしてるので、リフレッシュしたいなーとは思っていますが、なかなかどう習得したらいいのかわからない。実践経験?

つづく

INSPIREDとジョブ理論の評価が高そうなので、また引き続き読書しようと思います。

1st Shiny Contest に参加しました

Shiny Contest とは?

Shinyとは、さまざまなinput形式に基づき動的にグラフを作成し、Webアプリやダッシュボードとして簡単に公開できる人気の高いRライブラリです。

Rが好きな理由の一つに、Shinyのことを言うRユーザは多いのではないでしょうか(私の希望的観測)。

本題のShiny Contestとは、1月7日にRStudio社の公式ブログで発表された第1回目のShinyアプリのコンテストです。

blog.rstudio.com

参加資格としては、

  • RStudio Cloudでソースコードを公開すること
  • shinyapps.io にデプロイすること
  • コードやデータは自由に公開できること

を満たすアプリであればだれでも参加できます。

参加するために、RStudio CommunityにBlogを投稿する必要がありますが、アプリの紹介とデプロイしたアプリのURLを書いて投稿完了となります。

締め切りは3/8まででした。実は私がこのコンテスト知ったのは、2月末ごろにRStudio社のツイートがRetweetされていたのをたまたま見て知りました。

ABテスト用のサンプルサイズ計算アプリを投稿してみた

このコンテストを知る前から、自身の統計の勉強も兼ねて、ABテストのシミュレーションに使用するためのサンプルサイズ計算Shinyアプリを作っていました。

ちょうどコンテストのことを知ったときくらいに、アプリはできていたので、いろいろと機能を加えて投稿しようと考えました。

ABテスト用のサンプルサイズ計算アプリはすでに世の中にたくさんあります。しかし、このとき自分がなぜいまさらShinyアプリを作ろうと思ったのは、既存のアプリでは満足できなかったからです。例えば、

  • Type Ⅰ / Type Ⅱエラーのサマリーした表が欲しかった。有意水準と検出力を人に理解してもらうためでもあります。検出力が小さいとこの箇所のパーセントが小さくなりますと人に説明することを想定しています。
  • サンプルサイズ計算までの各パラメータをまとめてhtmlのテーブルに出力したかった。htmlテーブルだと、社内のConfluenceに秒でコピーペーストでき、各パラメータを動かしたときの必要なサンプルサイズの結果をすぐにお伝えすることができるからです。
  • 有意水準と検出力を可視化したプロットが欲しかった。この効果量だと、A群とB群の分布がこうなるんですよと人に見せることをを想定しています。

上記のように、人に説明することを想定して、自分の理解も深めようと考えアプリを作成しました。

実装したGithubはこちらにあります。

github.com

また、RStudio Communityに投稿したポストはこちらです。

community.rstudio.com

実は自分が投稿する数日前に、下記のブログの作者もサンプルサイズ計算のためのShinyアプリを投稿していました。

www.searchdiscovery.com

このアプリのコードを読んで、アイデアをいくつかもらい、自身のShinyアプリにも追加で実装しました。 この記事でも、結果を誤解されないように丁寧に項目を精査している旨が書かれており、非常に参考になりました。

結果発表

4/5にRStudioから結果が発表されました。

blog.rstudio.com

当初の予定では、3/22までに発表すると予定されていましたが、予想以上に投稿数があったたため、発表日を延長したみたいです。

上記の公式ブログにも各種統計情報が掲載されていますが、136個の投稿があり、4人のWinnerが選ばれました!

選ばれたアプリをぱっと眺めているだけでも、Shinyでどうやって動いてるんだ?と思うものがあり、見てるだけで非常に楽しいです。一度は目を通すと勉強になるかと思います。

気になったShiny App

69 Love Songs: A Lyrical Analysis

Best Design ということでWinnerに選ばれたアプリです。開くとわかりますが、フォントといい、可視化の色使いといい、クールな見た目のアプリです。

ぱっと見て複雑な処理はそこまで多くなさそうなので、どうやって実装しているかをあとでチェックしたいと思います。

committedtotape.shinyapps.io

Pet records

こちらもWinnerに選ばれたアプリです。自身のペットの医療やワクチンのトラッキングアプリのようです。アイデアがユニークなのと、見た目のビジュアルも美しく、見ていて楽しくなるアプリです。

jennadallen.shinyapps.io

R Package Explorer

開くとわかりますが、もはやShinyアプリの見た目ではありません笑。

HTML Templateを駆使しているとのことですが、RのcomponentをどのようにHTMLの中に入れてコードを書いているのか気になりますので、こちらも要チェックです。

nz-stefan.shinyapps.io

ubeRideR

自身のuberの走行データを用いて可視化しているアプリです。こちらもHTML Templateを使用しているとのことですが、Shinyアプリの一線を超えた見た目に驚きました。

vivekkatial.shinyapps.io

おわりに

Shiny Contestによって、世界中からさまざまなアイデアを持ったShiny Appアプリが集まってきました。 提出する前にすでに投稿済みのアプリを眺めていましたが、非常にユニークなアプリが多く、見ているだけで楽しかったです。

投稿されたものについては、ほぼすべての実装がRStudio Cloud上でソースコードが公開され、すぐに実行することができるようになっています。 これを機に、気になったShinyアプリを見つけ、ソースコードを追うなどして深くShinyを勉強できるかと思います。

また、一からShinyを学びたい人は、今は非常に日本語の資料も増えてきています。

特に、@Np_Ur_ さんの100本ノックやShiny Advent CalendarやShiny本からはじめると非常にスムーズに学べるかと思います。

www.randpy.tokyo

qiita.com

次回のShinyContestでもなにか出せるようにネタを作っておこうと思います。そして、日本からもどんどん提出していきましょう。

参考

私が実装するにあたり、既存のABテストに関わるShinyアプリをいくつか参考にしました。

2018年導入してよかったこと・振り返り

今年も終わります。昨年のまとめに続きに今年も振り返ってみます。

gingi99.hatenablog.com

昨年の導入してよかったもの+習慣とかの振り返りを追加した感じです。

習慣

ワーク管理を更新

ツールを増やして、以下で運用中。

  • 一次受け
    • Google Keep:すべてのメモ
    • Pocket : Web系の気になる記事等の一時保存
  • To Do管理
    • Trello : To Do管理。カンバンっぽく使っている
  • 共有
    • HackMD:Markdownで他人に共有したいときに使っている
  • まとめ先
    • はてぶ : まとめれそうなものは記事化
    • ASANA:英語に関するメモやまとめ
    • Github と Gitlab : プロジェクトを作って、IssueやWikiにまとめる
    • Evernote:メモを含むすべてのまとめとして使ってたが、重くなってきたのと、整理できなくなってきたので、上記に一部移行中

他にも、KanbanFlowやScrapboxも使い始めてるが、ツールが多すぎると逆に面倒になりがちなので、使い方を考えている。

論文をiPad + Papersで読むようになった

iPadを調達して、論文を読むために、学生特権でPapers3を購入した。論文・PDF管理はそれに一任できて、問題は起こってないので、来年もこのままいく。

投資信託

博士課程を終えて、時間ができたのもあり、記事をみたり本を読んだりして勉強して、いろいろと申し込んだ。この辺の知識は知っているか知らないかで人生の後から損する系なのでコツコツ情報収集しないとなと思った。  

アウトプットの習慣

  • はてぶ : 12件
  • Qiita : 5件

であった。あまり数が多いほうが良いとかも思わないが、毎年+1以上で増やしていきたいと思っている。 書きかけの記事もあったりするが、質もあげていきたいので、コツコツ書く習慣を継続する。

転職活動した

転職エントリはまた別日に書くとして、転職活動は自分の悶々と考えていたキャリアプランをクリアにし、外を知ることで自分の立ち位置や今後どういうポジションの人になるのか考えるを良い機会であった。同じ業界のさまざまな人と話せるのはそれだけで楽しかったりしますしね。

朝型生活

会社にいくときは、7時30分に出社して、16時30分に帰るのをベースにした。 家に帰って、家族でご飯を食べて、子供をお風呂にいれて、子供が寝たあとは、夜は2時間以上時間ができるので、集中して1タスク以上取り組むみたいな感じ。

今年の後半は、有給消化の関係で、適当な生活時間になったが、来年もほぼこのベースを続けたい。

LINE Pay

お財布いらずで買い物できるし、貯まるポイントでお買い物できるのは良い。使える場所もめちゃくちゃ増えてるし。

動画で学習

Amazon Primeもそうだが、Youtube Premiumのおかげで広告なしでオフライン動画を見れる。 英語もGoogleのおかげで字幕付きで見れるし、これからはYoutubeでキャッチアップすること増えるだろうなーと思っている。

モノ

Huawei p20-lite

consumer.huawei.com

スマホを2年ぶりに買い替えた。以前のスマホよりカメラの性能が大きく上がって満足。キャリアもキャンペーンに乗っかりUQに変更した。

Baby Smile 電動鼻水吸引器 メルシーポット

子供鼻水吸いのための導入。先輩型のおすすめどおり買ってよかった。

大和屋 すくすくチェアプラス テーブル付

テーブルの高さと同じくらいで、子供を固定できて、成長してもイスや足置き場の高さを調整できる。

シャープ 過熱水蒸気オーブンレンジ 2段調理

一人暮らし用のレンジから買い替え。毎日使う妻が嬉しそうだった。パンも焼けたりで、生活の質が上がる良いお買い物でだった。

バンキンス 油が落ちるスリーブビブ

子供用に毎日使っている。夏は暑いかもだが、それ以外の季節なら汚れを服につけなくてとても良い。

象印 炊飯器 5.5合 IH式 極め炊き

一人暮らし用の炊飯器から買い替え。値段も安いのに一気に美味しくなるからもっと早めに買ってよかった。

メディアやアプリ

ゲームオブスローンズ

Amazon Primeでたまにコツコツみてる。まだシーズン5見終わったところ。ハマる理由として、キャラの濃さと毎回最後のシーンが「えっ?」って感じなところ。

Kindle Unlimited (無料体験のみ)

マンション関連の知識をつけたくて、1ヶ月だけ使った。読める本はそこそこ面白いのもあったが、継続して使うにはもう少し新書だったりを充実してほしいと思った。古い本は、情報が古かったりするので、あまり読む気になれなかったり。

Grammarly

www.grammarly.com

カンタンに英文の文法チェックをしてくれる。精度もそこそこ良いので、英文書いたら必ず通すようにしている。Macのデスクトップ版を使っている。

2019年の導入予定

マンション

購入するかどうかはわからないが、子供が大きくなる前に決めていきたいと思っている。今はいろいろ調べ中。

Amazon Echo でのスマートな生活

購入したものの、継続して使いこなすほど使ってないので、また改めて考えてみる。TVの電源を消すアプリ作るところからかな。

子供用のおもちゃ

最近はおもちゃで面白いの増えてる(自分はほとんど買ってないのだが)ので、自分がむしろ興味がある。 というのも、ボードゲームと同じようにおもちゃによる知育にゆるく興味があるので、なんか良さげなおもちゃをビックカメラで探してる。

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

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

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

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

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

github.com

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

f:id:gingi99:20181202225504p:plain

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

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

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

参考

任意の相関係数をもつデータを可視化するShinyアプリを作った

(ピアソンの積率)相関係数が0.XXのときって散布図どんなんだっけ…?とかを直感的に確かめる / 相関係数を学ぶ人向けのツールが欲しかったので、Shinyで作りました。

以下のShinyappsで公開中

Correlation Viewer

コードはこちら

github.com

任意の相関係数を持つ疑似データの作り方は、以下のSlideを参考にしました。

Rで架空データの発生

今後機能を増やすかは未定です。なにか思いつくか、なにか要望を頂いたら考えます。

「人工知能システムのプロジェクトがわかる本」を読んだ

この本を読んだ目的

  • ML Engineerとして機械学習システムを構築する際に、必要な要件をもれなく把握しておくのに適していそうな本を見つけたため
  • 著者はNECで30以上システム導入経験があり、ノウハウが溜まった知識をすぐに知れそうだと思ったため

書評

タイトルのとおり、人工知能を積んだシステムを提供するときに考えておくべき項目がまとめられていた。 全体的に理解できている内容も多かったので、再確認することが多かったため、さくっと読めました。また、システムの運用の話まで入ってる本は珍しいので、とても参考になりました。

備忘メモ+感想

1章 実用化されつつある人工知能

分析の基本的な話

2章 通常のシステムと人工知能システムの開発プロセスの違い

1.企画フェーズのあとにトライアルフェーズがあること

2.開発フェーズの内の要件定義時や納品前にデータ分析を行うこと

3.運用フェーズにおいて人工知能システム特有の運用・保守(人工知能のモニタリングやメンテナンス)を行うこと

特に3がよくある負債の話。

3章 人工知能システムの企画

人工知能システムの運用・保守の代表的な作業

再学習

予測結果や精度の確認

新対象の追加

人工知能の挙動に対する問い合わせ応答

特に、よく聞かれる問い合わせとかは先にまとめておいたほうが良いと感じますね。本の例にもあった、人間の直感と反する場合の結果がでたときや、急に精度が悪くなった時の理由説明をスピードよく提供するとかですね。

4章 人工知能プロジェクトのトライアル

時間集計粒度 = 時間分解能

という言い方は知らなかった

回帰問題での評価指標

平均誤差

平均誤差率

最大誤差値

一定値以上の誤差値の割合

上振れ誤差率

下振れ誤差率

研究とかだと、RMSEが一般的だったりするが、データマイニングのように問題にあった評価指標を選定する感じがあって良いですね

5章 人工知能システムの開発

データ量の決定(例:どれくらい過去のデータを使うか)

モデルの更新方法の決定(例:バッチかオンラインか)

学習データが少ないときの対応(例:抽象度が高いデータを使う)

異常値処理方法の決定

よくある話でした

6章 人工知能システムの運用・保守

精度の日々の確認

人の知見・直感に合わない結果に対する原因

 学習データに要因となる特徴が入ってない

 運用時のデータの傾向が大きく変わっている

 過学習してる

 レアケースすぎて学習できてない

 結果がワンパターンすぎる

レアケースすぎて学習できてないとか結構あるんだよな…