2018年に参加したデータ分析系の勉強会で得た知識の詰め合わせ

社内に分析チームがないことから、私は月に3~4件は刺激を求めて勉強会に足を運んでいます。新しい知見を得れることは然ることながら、社内だともらえないフィードバックをいただけたり、課題の共有などをできるのが良いと思います。

目の肥えた皆さんにとって新規性のある情報はあまりないかもしれませんが、詰め合わせた情報をお楽しみください。

統計学まわり

  • 勉強会名
    KDD論文読み会

論文読んだ「Winner’s Curse: Bias Estimation for Total Effects of Features in Online Controlled Experiments 」

機械学習まわり

  • 勉強会名
    merpay×M3 機械学習 NIGHT

    • 会社名
      M3
    • 知見
      コンテンツをレコメンドする際のテクニックとして、MFとCNNの合わせ技について紹介されていました。訓練時には、アクセスログデータをもとにMFで潜在的な表現を抽出しそれのアイテム間の類似度を計算し、推薦時には、テキストのタイトルとキーワードなどをCNNで学習し訓練時と同じ次元になるようにアイテムのベクトルを出力する。そして、訓練時のものと近いアイテムを推薦することでCold-Start問題を克服するとのことでした。
    • 発表資料
      Matrix Factorization と Text CNN による Cold Start Problem への取り組み

The Road to Machine Learning Engineer from Data Scientist

  • 勉強会名
    NetaDashi Meetup

    • 会社名
      NRI
    • 知見
      Elmoを用いた文書分類。Word2Vecなどではできなかった、文脈を考慮して類似度などを算出できる。
      Elmoの多言語対応に関しては、このGitHubを参照すると良いらしい。
      https://github.com/HIT-SCIR/ELMoForManyLangs

異常検知の評価指標って何を使えばいいの? / Metrics for one-class classification

  • 勉強会名
    グリー開発本部 Meetup #1 DataEngConf NYC報告会

    • 会社名
      GREE
    • 知見
      Contextual Banditについての紹介
      Artwork Personalization at Netflix」という記事で2017年ごろに取り上げられていたようです。

エンジニアリングまわり

  • 勉強会名
    グリー開発本部 Meetup #1 DataEngConf NYC報告会

    • 会社名
      GREE
    • 知見
      LUIJI
      ・メリットとしては、少なくとも以下のものがあるそうな。
       ・Pythonで書ける
       ・エラーの途中で処理を止めて、それを解消したら、止めたポイントから開始できる
       ・様々なツール群と連携できる柔軟性
       ・10行程度でスクリプト書ける。
       ・複雑な依存関係も描ける。
    • 発表資料
      https://www.slideshare.net/greetech/dataengconf-nyc18-1

  • 勉強会名
    bq_sushi tokyo #9 2018総集編

    • 会社名
      オープンハウス
    • 知見
      BigQueryGIS
      BigQueryからGISの情報を扱うことが可能になったらしい。顧客の希望する物件の情報をレコメンドするために地理情報を扱うらしいです。
      ただ、基準とする測地系が国によって異なり、それらを考慮しないで推薦すると1~2kmはズレてしまうとのこと。家買う際にそんだけズレるとキツイですね。こちら(BigQueryGIS: Google und PostGIS )はBigQueryGISに関連した情報を漁って見つけた記事ですが、BQで抽出した情報をそのままGoogleMapに表示できるのは面白いですね。

データ分析のツラミ系

  • 勉強会名
    merpay×M3 機械学習 NIGHT

    • 会社名
      M3
    • 知見
      メタデータの検索システムについて
      データセット名、テーブル名、カラム名、カラムのディスクリプションをキーワードで検索できる。
      日次でディスクリプションを取ってくるようにしている。どのドキュメントが一番見られているのかもモニタリングできるとのこと。似たような取り組みとして、リクルートがMetaLookingとかいう内製ツールを作っていたりしますね。私は各サービスごとのDBのテーブルの注意点などを適宜スプレッドシートに残す程度しかしていませんが、分析者がすぐにキャッチアップできる環境は重要ですね。

  • 勉強会名
    MLCT

    • 会社名
      ???
    • 知見
      事業計画書を作るリーンキャンバスの機械学習版とも言える、機械学習キャンバス0.1というものが質疑応答の際に紹介されていました。

  • 勉強会名
    グリー開発本部 Meetup #1 DataEngConf NYC報告会

    • 会社名
      GREE
    • 知見
      データリーク問題はどこも苦しんでいる?
      SalesForce社が顧客企業15万社の情報を活用して、機械学習モデルを構築しようとしたが、
      蓄積されたデータにおいては、ビジネスプロセスをやたらと予測できてしまうようなデータリーク問題が起きまくっていた。
      原因としては、データサイエンティスト不足(分析を前提としたデータ蓄積ができていない。)、手入力によるラベリングミスなどがあるらしい。
      どこの企業も苦しんでいると思うと、分析を前提にスナップショットを残し続けるという取り組みは競争優位性につながるのだろうか。
      SalesForce社は、訓練と検証の精度の差が大きいと注意したり時系列データを確認するなどして、データの信憑性に気をつけてモデルを作ったそうです。
      15万社にうまくフィットするモデルなので、精度は70~75%で満足できるものらしい。
    • 発表資料
      https://www.slideshare.net/greetech/dataengconf-nyc18-1

R Advent Calendar 2018 一発屋芸人の検索トレンドの分析

はじめに

昨年のR Advent Calendarはポケモンのデータをrvestでスクレイピングして、レアポケモンがどのような種族値における特徴があるのかを探ったり、経験値が必要な割に種族値が低い「コスパの悪いポケモン」などを見つけました。
今年のR Advent Calendarでは、年末年始といえば一発屋芸人のテレビなどでの露出が多くなることから、一発屋芸人の検索トレンドのデータを手に入れて分析してみたいと思います。

分析工程

・データの収集
・データの整形
・可視化
・分析

データの収集

こちらのサイト(流行した一発屋芸人一覧/年代流行)に一発屋の芸人さんが列挙されていました。私は普段テレビを見ないので大体の芸人さんがわからないです。

Googleトレンドから、芸人名に関するGoogle検索の時系列データを収集します。

非常に残酷なデータだなと思いました。

ただ、一つ弁護すると、Googleトレンドはレベルではなくピークを1として標準化した数値をデータとして提供してくれていますので、
ピークが著しく高ければ、今の水準が低くてもそこそこ検索されている可能性はあるとだけ言っておきます。

本当の検索回数が必要な場合は、Google Adwords(検索連動型広告)のアカウントの開設とともに検索ボリューム取得APIなどの申請が必要なので、正確なデータが必要な場合は会社として取り組んだほうが良いと思います。個人では厳しいです。

データの整形

各芸人さん(総勢21名)の検索トレンドデータのピークの6ヶ月前までのデータと6ヶ月後のデータまでの合計1年間の検索トレンドを各々抽出してみようと思います。
GoogleトレンドのデータはCSVでダウンロードできますので、そのCSVを読み込み、トレンドのデータを文字列から数値にし、ピークの前後12ヶ月ずつのデータを抽出します。
そうすることで、一発屋芸人のピークの前後に関するデータを作ります。(ただし、今朝、Google Trendのデータを取得できるgtrendsRというパッケージがR bloggerで紹介されていました。APIないはずなんですが、URLの工夫か裏でSelenium動かしていたりするんですかね。)

可視化

作成したデータを実際にプロットしてみます。

一発屋にも盛り上がり方に違いがあるようですね。

時系列クラスタリングの適用

多様な盛り上がり方があることから、TSclustというライブラリを使って時系列クラスタリングを行い、トレンドに関しての分類的なものを得たいと思います。
今回初めて使うのですが、参考文献によると様々な類似性指標を指定して、時系列ごとの類似性を計算するようです。ピアソン相関係数のようなシンプルなものもあれば、ユークリッド距離のものやFrechet距離とかいう聞いたことないものまで幅広く用意されています。今回はシンプルにピアソン相関係数にしてみます。そして、類似性指標を出してから、そのまま階層クラスタリングを行います。

こちらが、TSclustのdiss関数を用いて計算した時系列データごとの距離を、階層クラスタリングにより描いたデンドログラムです。

この分類だけ見ても、芸人さんを知らない私からすると何も共感がありませんので、先程のクラスタリング結果をもとに可視化をしてみます。
そこで、Tokyo.Rで知らない人はいないであろう、yutaniさんの作られたgghighlightを使ってみようと思います。

ただ、日本語のラベルの表示がうまくいかなかったので、芸人さんの名前をGoogleSpreadSheetのGoogle翻訳関数(GOOGLETRANSLATE)で英訳しておきます。

(Anyway bright YasumuraやThick slice Jasonは結構キャッチーなのでは?)

まずはクラスター1

比較的短期でピークに達し、すぐに検索されなくなる、一発屋の名に相違ない傾向を持ったクラスターのように思われます。「日本エレキテル連合」とか「楽しんご」とか「8.6秒バズーカ」とかです。

続いてクラスター2

急激にピークに達するものの、ややしぶとく残り続けるような一発屋のクラスターなのかなと思います。「レイザーラモンHG」とか「厚切りジェイソン」とか「ピコ太郎」とか「世界のナベアツ」です。

そしてクラスター3

3人の芸人さんしか属していないですね。クラスターの数は2個でもよかったかもしれない。段階的にピークに達し、一気に落とされるという一発屋のクラスターのようです。「とにかく明るい安村」とか「藤崎マーケット」とか「すぎちゃん」とかです。

様々な傾向の一発屋さんがいるのがわかりました。

トレンドの推定

今回扱っているデータは芸人さんの数×時点のデータの多変量時系列となります。都合の良いものはないかと考えていましたが、古典的なVARではサンプルサイズ的にかなり苦しいと思い、Stanによるダイナミックパネルデータ分析などの事例はないか漁っていましたが、なかなかありませんでした。

松浦さんの『StanとRでベイズ統計モデリング (Wonderful R)』の241pに書かれている、モデル式12-8や12-9が今回のものに適しているなと思いましたが、コードを上げている方は見当たらなかったです。よしそれならば作ろうかと思った矢先、logics-of-blueさんのStan Advent Calendarの投稿、「Stanで推定する多変量時系列モデル」がかなりどんぴしゃな内容でしたので、コードを拝借してこの一発屋データの推定をしてみようと思います。

まずは、stanのコード

そしてキックして結果を可視化するためのRコード

そのまんま実行して、一発屋の時系列の中央値を可視化したらこんな感じになりました。一発屋のトレンドをうまく抽出できているのかなと思います。

今後の改良としては、階層性を持たせ、芸人さんごとのハイパーパラメータを持たせるとかなのですが、正月にでも取り組みたいと思います。(芸人さん以外のデータでやりたい。)

一方で、他にも多変量時系列で何かないか漁っていたのですが、Applied Time Series Analysis for Fisheries and Environmental Sciences : Dynamic factor analysisで紹介されている、Dynamic Factor Analysisというものが面白そうだなと思いました。
bayesdfaというパッケージを用いて、多変量時系列データに存在するであろうトレンドをStanを用いて推定することができるようです。元となった論文には各エリアごとのノルウェーロブスターの個体数のトレンドを推定し、3つのトレンドが発見されたとしています。ただ、同時点間のデータではないという点から今回のデータへの適用は不適切です。

同時点間に観測されていないデータであるという問題を認識した上で、このパッケージを使ってどんなトレンドを抽出できるのか試してみようと思います。

徐々に増えてから一気に落ちるトレンドや、一気に増えてから徐々に落ちるトレンドなどがうまく捉えれている気がします。
さらなる試行として、AICのような情報量基準である、Leave One Out Information Criterion (LOOIC)が最も低くなるトレンドの数を探索してみます。

トレンド数を1から5まで指定して実行した結果、5の時が一番LOOICが低くなりました。

まぁ、適切な使い方ではないのですが、徐々に増えてから一気に落ちるトレンドや、一気に増えてから徐々に落ちるトレンドなどが引き続き捉えれているようです。

今後の課題

・Stanによる多変量時系列のモデリングをしてみる。(Dynamic Panel分析とかもできると良い。少なくともStanのドキュメントにはない。)
・Dynamic Factor Analysisの適切な事例での適用をしてみる。

それでは、どうか良い年末をお過ごし下さい!
メリークリスマス!

参考情報

Introduction to gghighlight: Highlight ggplot’s Lines and Points with Predicates
{TSclust} ではじめる時系列クラスタリング
Applied Time Series Analysis for Fisheries and Environmental Sciences 9.7 Dynamic factor analysis
読了:Montero & Vilar (2014) RのTSclustパッケージで時系列クラスタリング