深層学習のマーケティング適用事例をarXivから漁る

はじめに

深層学習が流行りだして久しいですが、マーケティングにおいて適用することが全くないため、学習のモチベーションを維持する事ができておりません。そろそろアカデミアの領域でマーケティング事例での深層学習の盛り上がりがあるのではないかと期待して、調べてみようと思います。

基本的に各研究ごとに
・目的と結果
・対象となるデータ
・手法の概要
・PDFのリンク
について記していきます。リンクは下の方にある参考情報を参照ください。

調べ方

いったん、皆さんの大好きなarXiv.orgに掲載されている論文の中から、マーケティングに関わりそうなものを見つけます。見つけ方としては、Google検索において、「marketing deep learning site:https://arxiv.org」するものとします。site:コマンドを使うことでarXiv.org以外の情報を弾いて検索できます。

今回紹介する研究

  • Predicting online user behaviour using deep learning algorithms
  • Churn analysis using deep convolutional neural networks and autoencoders
  • Customer Lifetime Value Prediction Using Embeddings

Predicting online user behaviour using deep learning algorithms

目的と結果

大規模ECサイトのユーザー行動からの24時間以内での購買意図の予測を目的としており、ベースラインである既存の手法と比べて、深層学習の手法(Deep Belief Networks・Stacked Denoising auto-Encoders)が予測において勝り、不均衡データの分類においても秀でているという結果となった。

対象となるデータ

  • 6ヶ月間のECサイトのユーザー行動データ
    • ユーザーID

    • タイムスタンプ

    • イベントタイプ

      • 商品のPageView(価格などの詳細データが伴う。商品数は25,000個)
      • カゴのPageView(価格などの詳細データが伴う。)
      • 購入
      • 広告クリック(今回の分析では無視)
      • 広告ビュー(今回の分析では無視)

手法の概要

  • 前処理
    ・購入までのセッション期間
    ・ユーザーごとの購入に対するクリックの比率
    ・購入までのセッション数の中央値
    ・商品の説明文
    ・商品の価格
    ・商品に費やされたセッション時間の合計
    ・セッションが発生した時刻
    ・セッション単位でのクリック数
    ・セッション単位での購入した商品の平均価格
    ・過去24時間でのページビュー数
    ・先週のページビュー数

    • 購入アイテムの説明文に対して、word2vecにより50次元の分散表現を作成しその算術平均をとった。
    • サイトにおいてクリック数が10回以下のユーザーのデータを除外。
    • 特徴量の次元圧縮のためにNMF(Non-Negative Matrix Factorization)を適用。
  • アルゴリズム(評価方法はAUC、10分割交差検証。Kerasで実行。)
    • Deep Belief Networks
      2006年にHintonが提案した教師なし学習アルゴリズム。制約付きボルツマンマシン(RBM)を多数重ねて、最上位層だけ無向でそれ以外は下層への有向エッジを伴うネットワーク。
      RBMよりも複雑なデータ生成の仕組みをモデル化することができるとされている。
    • Stacked Denoising auto-Encoders
      AutoEncoderは出力データが入力データをそのまま再現するニューラルネットワークで、入力層から中間層への変換器をencoder、中間層から出力層への変換器をdecoderと呼ぶ。
      そのAutoEncoderを高次元に写像できるように改良したものがDenoising auto-Encodersと言われています。
      さらに、そのDenoising auto-Encodersを層ごとに学習し積み重ねて教師ありの学習器を繋いだものをStacked Denoising auto-Encodersと呼びます。
    • 決定木
    • ランダムフォレスト
    • Drop outによる正則化
      過学習を避けるために、ランダムに隠れ層や入力層を除いている。

PDFのリンク

Predicting online user behaviour using deep learning algorithms

Churn analysis using deep convolutional neural networks and autoencoders

目的と結果

電話通信業におけるユーザーの解約予測を行うことを目的とし、深層学習を用いた予測の結果、既存手法よりも精度が高いことがわかった。
また、解約予測だけでなく、解約理由を探るに際しての可視化においてもAutoencoderを用いることで理解が深まることが示されている。

対象となるデータ

  • ユーザー情報(おそらく携帯電話会社であるタイのトゥルー・コーポレーションのデータ)
    • データ使用量
      モバイルのプリペイド補充金額
      モバイルのプリペイド補充頻度
      音声通話
      通話時間
      SMSメッセージ
      など

手法の概要

  • ユーザーの情報を画像のように扱う。各々の行が日にちを表し、各々の列がユーザー行動の種類を表す。
  • 二値変数の定義
    解約の定義は30日間行動が観察されなかったかどうか。(解約率は3.57%)
    最後の通話は過去14日間での通話として、最後の14日間に記録のなかったユーザーは分析対象から除外している。プロアクティブな解約予測をするに祭して、すでに解約してしまったと思われる人を除外するということとなる。
  • ユーザー行動を画像のように変換したデータに対してCNN(Convolutional Neural Network)を実行しています。
    CNNの構成としては、
    ・2連続のConvolutional Layer
    ・2×1の最大Pooling Layer
    ・128個のFully Connected Layer
    ・バイナリーな結果を返すsoftmax output
    となっています。
  • 訓練データとテストデータは80:20で分割
  • Docker上で環境を構築
  • オープンソースライブラリとしてはTheano、TensorFlow、Kerasを利用。
  • ユーザー理解のためにAutoencoderを適用している。

PDFのリンク

Churn analysis using deep convolutional neural networks and autoencoders

Customer Lifetime Value Prediction Using Embeddings

目的と結果

手探りで特徴量を構築してきた、既存のCustomer Lifetime Value(CLTV)の算出手法に勝るモデルを作ることを目的とし、十分なデータがあれば、既存の特徴量よりも予測パフォーマンスにおいて秀でていることが示されている。しかしながら、ランダムフォレストを超えるレベルの精度を追求するとニューロンの数を大幅に増やす必要があり、計算コストがかかるため商業的なバリューにおいて懸念がある。

対象となるデータ

  • ユーザー情報(アパレルECサイトのASOS.comのデータ)
    注文数
    注文日の標準偏差
    直近四半期のセッション数
    売り上げ
    など

手法の概要

  • 特徴量の生成
    word2vecを行うに際して、単語の代わりとしてユーザーの商品ビューデータを入力としてニューラルネットワークによる分散表現の生成を行なっている。出力層において、全てのユーザーへのノードがあり、ユーザー数が1億人近くいるため計算が膨大になってしまうが、Negative Sampling(NE)によるSkipGramを行うことで、計算の高速化(近似による計算コストの低減)が図られている。分散表現の次元は32-128次元までが望ましい傾向を示している。
  • Hybridモデルの適用
    既存の特徴量に分散表現を加えた、ロジスティック回帰とのHybridなDNNによるモデルの適用を行なっている。
  • CLTVの研究ながらも、予測し検証する目的変数は解約(12ヶ月購買なし)の有無。
  • 検証用のデータは5万人のユーザーデータ
  • ベースラインとの比較となる評価指標はAUCが使われている。ベースラインはロジスティック回帰とランダムフォレスト。
  • オープンソースライブラリとしてはTensorFlowを利用。GPUはTesla K80を利用。

PDFのリンク

Customer Lifetime Value Prediction Using Embeddings

まとめ

  • ユーザーの行動ログに対して、縦を時間、横にカテゴリとして画像データのように扱うアプローチを知れた。
  • データ数が十分に多そうな企業の適用例が多かったが、扱うデータの規模感が少しわかった。
  • 画像や音声ではなく、ユーザーデータにおいてもDNNでランダムフォレストを超える精度を叩き出せる可能性はあるが、計算コストがかかってしまい商業的なバリューが下がってしまう可能性もある。
  • ログや閲覧したページのコンテンツベースに生成した分散表現を特徴量とするアプローチが3例中、2例あった。

データ量の観点からまだまだ社内での適用は視野に入っていないですが、私のDNN理解も浅いので、今回のような分析事例をモチベーションにして勉強を進め適用可能性を探っていきたいと思います。

参考情報

Chainer v2による実践深層学習
深層学習 (機械学習プロフェッショナルシリーズ)
Stacked Denoising Autoencoderを用いた語義判別
Dropoutの実装と重みの正則化
RBMから考えるDeep Learning ~黒魔術を添えて~
Convolutional Neural Networkとは何なのか

R Advent Calendar 2017 rvestを用いてポケモンデータをスクレイピング&分析してみた

R Advent Calendar 2017の11日目を担当するMr_Sakaueです。
今回はrvestパッケージを用いて、友人がハマっているポケモンの情報を集めてみようと思います。
もっとも、業務でWebスクレイピングする際はPythonでBeautifulSoupやSeleniumを使うことがほとんどなのですが、たまにはRでやってみようと思います。

目次
・やりたいこと
・rvestについて
・データの取得と集計と可視化と分析
・まとめ
・参考情報

やりたいこと

今回はポケモンたちのデータを集めた上で、以下の内容を行いたいと思います。

  • ポケモンのサイトから種族値を取得
  • ポケモンの種族値を標準化して再度ランキング
  • ポケモンのレア度や経験値に関する情報を取得
  • レア度や経験値と相関しそうな種族値を探る

今回扱った全てのコードはこちらに載せております。
https://github.com/KamonohashiPerry/r_advent_calendar_2017/tree/master

※種族値はゲームにおける隠しパラメータとして設定されている、ポケモンの能力値とされている。

rvestについて

rvestはRでWebスクレイピングを簡単に行えるパッケージです。ここでの説明は不要に思われますが、今回はread_html()、html_nodes()、html_text()、html_attr()の4つ関数を用いました。

基本的に以下の3ステップでWebの情報を取得することができます。

  • STEP1
    read_html()でHTMLからソースコードを取得する。(Pythonでいう、requestとBeautifulSoup)
  • STEP2
    html_nodes()でソースコードから指定した要素を抽出する。(PythonでいうところのfindAll)
  • STEP3
    html_text()やhtml_attr()で抽出した要素からテキストやリンクを抽出する。(Pythonでいうところのget(‘href’)など)

データの取得と集計と可視化

検索エンジンで検索してだいたい1位のサイトがあったので、そちらのWebサイトに載っているポケモンの種族値の一覧をスクレイピング対象とさせていただきます。

  • ポケモンのサイトから種族値を取得

以上のコードを実行すれば、こんな感じでポケモンの種族値一覧を得る事ができます。

とりあえず、種族値合計(Total Tribal Value 以下、TTV)のランキングの上位を確認してみます。知らないんですが、メガミュウツーとかいうイカつそうなポケモンが上位にいるようです。昭和の世代には縁のなさそうなポケモンばかりですねぇ。

■TTVランキング

取得した種族値を項目別に集計したり、Boxプロットを描いてみます。どうやら、攻撃の平均が高く、ヒットポイントや素早さの平均は低いようです。

■種族値のサマリー

■種族値のBoxプロット

  • ポケモンの種族値を標準化して再度ランキング

さて、攻撃の平均が高かったり、ヒットポイントと素早さの平均が低かったりしたので、各々の項目を標準化した上で、再度ランキングを作ってみたいと思います。

■標準化した種族値のサマリー

平均0、分散1にできているようです。

■標準化した種族値のBoxプロット

他よりも低かったヒットポイントと、高かった攻撃がならされていることが確認できます。

■標準化前後でのTTVランキングのギャップが大きかったものをピックアップ

ラッキーが144位ほど出世しています。攻撃が低く、ヒットポイントの高いラッキーが標準化により優遇されるようになったと考える事ができます。ポケモン大会の上位ランカーである後輩社員もラッキーは手強いですと言っていたのでまんざらでもないのでしょう。

  • ポケモンのレア度や経験値に関する情報を取得

今回のサイトには、個別にポケモン別のページが用意されており、そちらから、ゲットしやすさや経験値に関する情報を抽出します。

以上のコードを実行すれば、やや時間がかかりますが、全ポケモンのゲットしやすさや経験値のデータを抽出する事ができます。それらの情報がゲットできたら、まずは可視化します。

■ゲットしやすさのヒストグラム

ゲットのしやすさは、小さいほど捕まえる難易度が高くなっています。難易度の高いポケモンである0が多過ぎるので、このデータは欠損値が0になっているのではないかと疑われます。

■経験値のヒストグラム

経験値は、レベル100になるまでに要する経験値をさしています。ほとんどが100万程度となっているようです。

■ゲットしやすさと標準化TTVの散布図

やはり、ゲットしやすさに関してはデータに不備があるようで、コラッタ(アローラの姿)のような雑魚ポケのゲットのしやすさが0だったり、伝説のポケモンであるネクロズマが255だったりします。ただ、上限と下限のデータを間引けば右下がりの傾向が見られそうです。

■経験値と標準化TTVの散布図

経験値が多く必要にも関わらず、TTVが低い集団があります。どうやらこの集団に属するのは、「キノガッサ」・「マクノシタ」・「イルミーゼ」・「ゴクリン」・「シザリガー」などで、一回しか進化しないポケモンのようです。これらのポケモンは育てにくく、TTVの低い、コスパの悪そうなポケモンと考えることができるのではないでしょうか。(技や特性によってはバリューあるかもしれませんが。)

  • レア度や経験値と相関しそうな種族値を探る

先ほどのレア度に関しては、データがおかしそうだったので、レア度0と255に関しては除外してみます。

■ゲットしやすさと標準化TTVの散布図

やはり除外する事で、理想的な右下がりの傾向を示す散布図が得られたと思います。
さて、各種族値がレア度にどれだけ相関しているのかを分析したいのですが、その前にレア度を表す二項変数を作成します。

■ゲットしやすさが50以下であれば1、それ以外を0にする変数を作成

続いて、各種族値を説明変数として、レア度を目的変数としたロジスティック回帰モデルの推定をrstanで実行させます。

■stanコード

■rstanでロジスティック回帰を行い、推定結果を可視化するコード

■MCMCのシミュレーション結果のトレースプロット

どうやら収束してそうです。

■ロジスティック回帰の推定結果

見にくいので、推定結果を松浦さんの「StanとRでベイズ統計モデリング」にあるコードを用いて可視化します。

■推定結果の可視化

どうやら、0を含まない係数について見てみると、b3(攻撃)、b5(特殊攻撃)、b6(特殊防御)が高いほど、レア度が増す傾向があるようです。珍しいポケモンは攻撃が強いという傾向があると言えるのではないでしょうか。

まとめ

  • rvestは簡単にスクレイピングできて便利。
  • ポケモンデータは色々整備されてそうで今後も分析したら面白そう。
  • 珍しいポケモンは「攻撃」、「特殊攻撃」、「特殊防御」が高い傾向がある。
  • 経験値が必要なのにTTVの低い、コスパの悪そうなポケモンたちがいる。

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

参考情報

データサイエンティストのための最新知識と実践 Rではじめよう! [モダン]なデータ分析
StanとRでベイズ統計モデリング (Wonderful R)
【R言語】rvestパッケージによるウェブスクレイピング その2
Receiving NAs when scraping links (href) with rvest

分散表現を特徴量として文書分類するための方法について調べてみた

以前、テキストアナリティクスシンポジウムに参加した際に登壇者が機械学習のタスクにおいて分散表現を特徴量に使ったと言っていて、実務で使えるようにしたいと思ったので、調べた手法について記します。

先行研究

海外のブログ(Text Classification With Word2Vec)では、以下の手順で文書分類のための特徴量としてWord2Vecが用いられていました。

  • STEP1:ロイターのコーパスをもとにWord2Vecを求める。(先行研究では100次元に圧縮しています。)
  • STEP2:テキストごとに属する単語に対して、STEP1で求めた100次元の分散表現の平均値をとる。あるいは、TF-IDFのスコアで重み付けしたものを作る。これで100次元の分散表現が各テキストごとに用意できる。
  • STEP3:STEP2で作った100次元の分散表現を用いて、テキストごとのラベルについてExtra Treesによる分類器を学習させる。

ざっとこんな感じのアプローチになっていました。”ベクトルの足し算が意味の足し算に対応する「加法構成性」”という考え方からのアプローチと言えるのでしょうか。

そのあと、ベースラインとの比較をしていましたが、結論としては、ラベル付きのトレーニングデータが非常に少ない場合において有利である傾向があったものの、SVMなどの既存手法より精度が出ているとは言えないような結果でした。

今回の事例におけるタスクではうまくいかなかったようですが、テキストアナリティクスシンポジウムにおいてはアツいとされていたので、自社のデータで適用するなどしておきたいです。

今回取り上げたブログやGithubにはPython2.X系のコードしかなかったため、3.X系で動くように一部変更するなどをしました。
以下で3系で動き、同様の結果が出ているものを載せています。

コード

コードの概要としては
・訓練データの作成
・モデルの定義
・モデルのベンチマーク
・結果の描写
です。

事前にテキストデータをダウンロードして手に入れておく必要がありますが、それに関してはターミナルで実行できるものなので、ここでは載せていません。参考文献のblog_stuff/classification_w2v/benchmarking.ipynbを参照ください。

このようにSVCに負けている結果が出ます。

比較の棒グラフはこんな感じ。

自社のテキストデータで是非とも試したい。

参考文献

岩波データサイエンス Vol.2
blog_stuff/classification_w2v/benchmarking.ipynb
分散表現(単語埋め込み)
Text Classification With Word2Vec

階層ベイズモデルの直帰率分析への適用 with rstan

松浦さんの『StanとRでベイズ統計モデリング』の8章の階層ベイズがすごくわかりやすいなぁと思いつつも、自分の持っているデータで試していなかったので、これを機に実践してみようと思います。
やや変数を追加しているくらいで大した変更点はありませんが、題材としては当ブログのアクセスログにおける直帰率に関するデータで、どのような要素が直帰率に影響を与えるのかを分析します。

目次
・モデル概要
・前処理
・推定
・結果(非階層モデルとの比較)
・参考文献

モデル概要

モデルは8章のロジスティック回帰の階層モデルに一部変数を追加していますが、ほぼそのままです。記事ごとのパラメータやリファラーごとのパラメータを想定しています。
Nは記事数でnはそのインデックス、Cはリファラーの数でcはそのインデックス、Iはログとして残っているセッションの数でiはそのインデックスとなっています。hatebuは記事のはてぶ数、stringlineは記事の行数、holidayは休日or祝日ダミー変数、daytimeは12:00~18:00なら1をとるダミー変数、revisitedは再訪問ユーザーなら1を取るダミー変数となっています。記事ごと・リファラーごとに直帰のしやすさが違う(パラメータが従う正規分布のパラメータがそれぞれ異なる)という仮定のもとに立ったモデルとなります。

$$x[i] = b_{1} + x_{記事}[記事ID[i]] \\ + x_{リファラー}[リファラーID[i]] + x_{セッション}[i] $$

$$q[i] = inverselogit(x[i]) $$

$$Y[i] \sim Bernoulli(q[i]) $$

$$x_{記事}[n] = b_{2}hatebu + b_{3}stringline[n] \\ + b_{記事間の差}[n] $$

$$b_{記事間の差}[n] \sim Normal(0, \sigma_{記事番号}) $$

$$x_{リファラー}[c] = b_{リファラー間の差}[c] $$

$$b_{リファラー間の差}[c] \sim Normal(0, \sigma_{リファラー番号}) $$

$$x_{セッション}[i] = b_{4}holiday[i]  + b_{5}divice[i] \\ + b_{6}daytime[i] + b_{7}revisited[i] $$

前処理

GAのAPIからデータを取得して1セッション1記事になるようにデータを作成しています。数ヶ月で25000件ほどデータがあったのですが、計算に時間がかかるので、データ数を2400件くらいにサンプリングしています。

推定

stanコードはこちらになります。

rstanを用いたstan実行用のRコードです。ヴァイオリンプロットで主要な係数の分布を見る処理も書かれています。

結果

係数を見る限りは、符号の向きが確かなのはb5(PCダミー)とb7(再訪問ユーザーダミー)なので、PCの方が直帰しにくく、再訪問ユーザーの方が直帰しにくいという傾向があると考えることができます。

教科書ではAUCを非階層モデルと比較していましたので、比較してみようと思います。
AUCの計算を行うためのコードもGithubに載っていましたのでそちらを使います。

80%が良いとされているAUCには程遠いですが、記事やリファラーごとの差を考慮しない非階層のものよりもAUCが高いと言えます。
ちなみに、教科書の例のAUCは80%ほどでした。
Webマーケのデータ分析においてロジットは汎用性が高いで、今回のコードを土台に色々と業務で試していこうと思います。

参考文献

StanとRでベイズ統計モデリング (Wonderful R)
ベイズ統計モデリング: R,JAGS, Stanによるチュートリアル 原著第2版

確率的プログラミングライブラリ「Edward」まとめ

Edwardで何ができるのか知らなかったので、忘備録として残しておきます。

目次
・Edwardとは
・Edwardでできること
・参考スライド
・参考文献

Edwardとは

・LDAで有名なコロンビア大のBlei先生の研究室で、2016年より開発されている確率的プログラミング1) プログラミング言語の変数をモデルの構成要素として使うプログラミングのPythonライブラリ。
・積み木のように明快な形で確率的モデリングを行うことができる。(モデル→推論→評価 を一括でできる。)
・ベイズ統計と機械学習、深層学習、確率的プログラミングを融合させている。
・計算の際にTensorFlowを用いている。TensorBoardを可視化の際に用いることもできる。
・計算速度がStanやPyMC3よりも速い。GPUを用いた高速化も可能。2) pip install tensorflow-gpuでGPU版のTensolFlowを入れておく必要がある。
・統計学者のGeorge Edward Pelham Boxから名前を取っている。

Edwardでできること

一般的なベイズ推定は当然ながら、深層学習向けのベイズ適用系の事例が豊富なようです。

・ベイズ線形回帰( Supervised Learning (Regression) )
・バッチトレーニング(巨大なデータセットにおける学習で用いる)( Batch Training )
・Tensorboardを用いた可視化( Tensorboard
・Automated Transformations( Automated Transformations )
・線形混合効果モデル( Linear Mixed Effects Models )
・教師あり学習による分類( Supervised Learning (Classification) )
・教師なし学習( Unsupervised Learning )
・ニューラルネットワークの潜在空間モデル( Latent Space Models for Neural Data )
・混合密度ネットワーク( Mixture Density Networks )
・GAN( Generative Adversarial Networks )
・確率的デコーダー( Probabilistic Decoder )
・ネットワークの推論( Inference Networks )
・ベイジアンニューラルネットワーク( Bayesian Neural Network )
・確率的PCA(主成分分析)( Probabilistic PCA )

jupyterのコードたちはblei-lab/edwardのnotebookに載っています。

2層のニューラルネットワークへのベイズ推定の適用(
Bayesian Deep Learning with Edward (and a trick using Dropout) – Andrew Rowan – PyData London 2017)
Gounosyの方のブログによると、CTR予測などで扱うことができるようです。

参考スライド

参考文献

Edward: A library for probabilistic modeling, inference, and criticism

DEEP PROBABILISTIC PROGRAMMING

EdwardでBayesian DNN+Variational Inferenceをやってみた話

DEEP PROBABILISTIC PROGRAMMING —”深層学習+ベイズ”のライブラリ— Edwardの紹介

【Edward】MCMCの数学的基礎からStochastic Gradient Langevin Dynamicsの実装まで

Hello, world! Stan, PyMC3, and Edward
stanの開発者の方がstanとPyMC3とEdwardを比較しています。

Pythonで体験するベイズ推論 PyMCによるMCMC入門

References   [ + ]

1.  プログラミング言語の変数をモデルの構成要素として使うプログラミング
2.  pip install tensorflow-gpuでGPU版のTensolFlowを入れておく必要がある。

RのFactoRizationMachinesパッケージを用いたFMのページビューデータへの適用

Googleタグマネージャーで集めたアクセスログデータを用いて、前回と同様に記事のレコメンドにチャレンジしてみようと思います。FactoRizationMachinesパッケージという便利そうなパッケージの存在も知れたことから、今回は以前から気になっていたFactorization Machineを扱います。

【目次】
・Factorization Machine(FM)の概要
・パッケージ紹介とインストール
・サンプルデータの構造把握と前処理
・FMの実行
・結果
・参考文献

Factorization Machine(FM)の概要

  • 組み合わせ特徴量を扱う教師あり学習モデル。行列分解とSVMを合体させた手法。
  • スパースになりやすいデータの予測問題で扱う。
  • 1ユーザーのある商品に対しての評価を、1評価1行として表して、ユーザーとアイテムの交互作用の特徴ベクトルを扱う。
  • 相互作用項に関して、時間や文脈などを自由に入れられる。
  • 相互作用項を次元圧縮する際の要素数を事前に決める必要がある。
  • Matrix Factorizationよりも精度が良いとされている。特徴量エンジニアリングなどで使われているようです。(Click-Through Rate Prediction

パッケージ紹介とインストール

FactoRizationMachinesパッケージは線形SVMと2次のFMと高次のFMを実行することができ、引数で正則化項も加えることができます。現段階においては回帰のみで分類問題への適用は今後の開発となるようです。CRANから普通に
install.packages(‘FactoRizationMachines’)
でインストールします。libFMexeパッケージの場合は、libFMをインストールしてパスを指定しておく必要がありますが、このパッケージに関しては不要となります。

サンプルデータの構造把握と前処理

FactoRizationMachinesパッケージのサンプルコードにおいては、MovieLensのデータがサンプルデータとして載せられていました。ユーザーのID(整数)、映画のID(整数)、評価(整数、5段階)、日時(整数)からなるデータに対して、sparseMatrixに変換していました。

今回は、前回の投稿非負値行列因子分解(NMF)でブログ記事のレコメンドをしてみると同じデータを使って、アクセスログデータに適用しようと思います。FactoRizationMachinesの形式に合わせるために、このブログのアクセスログも、クッキーのIDを整数に、記事のIDを整数に、閲覧回数を5段階(5以上を5に変換)に、日時を整数に変更しています。

FMの実行

デフォルトの設定c(1, 10)では線形のウェイトが有効で、2次の項の要素数が10で正則化項なしのFMを実行することになります。引数に関する詳しい情報はPackage ‘FactoRizationMachines’に書かれています。今回はサンプルを参考に正則化項ありでモデルを実行します。まず、アクセスログデータに対して、ユーザーのIDからなる整数ベクトル、記事のIDからなる整数ベクトル、セッションのあった日時のデータからなる整数ベクトルを作成し、sparseMatrix関数を用いて元データを変形し、80%のデータをトレーニングに、20%のデータをテストに割り当てます。さらに、テストデータに関して、予測値との平均二乗誤差を計算します。

結果

各モデルについての平均二乗誤差を計算しています。
線形モデルや高次元モデルよりも、2次の項を持つFMが精度が高いようです。

こちらは、この中で性能の良かった2次の項を持つFMの予測結果とテストデータの結果をプロットしたものです。4点を超える値をあまり予測できていないようです。今回はサンプルを回しただけなので、本来であれば次元の数kや正則化のセッティングをいろいろいじったり、相互作用項を新しく追加するなどして精度を高めることが必要です。

結果の比較だけでは仕事で使えないので、実際に予測した結果を取り出したいと思います。
実際に運用するとなると、ページIDを所与として、ページビュー数を0とおいて(型をそろえるため。NULLだとエラーになった)、任意のタイミング(date)を想定して、モデルにデータを適用し、評価の高いものをサジェストするスタイルになるのではないでしょうか。

この結果だと、ユーザー98に記事1を見せることに対して4.02点が与えられています。

参考文献

Factorization Machinesを今更読みました
Factorization Machines
High-order factorization machines with R #tokyor 61
Factorization Machinesのおはなし。
libFMexeを動かすまで (R Wrapper for the libFM Executable参照記事)
一歩Matrix Factorization、二歩Factorization Machines、三歩Field-aware Factorization Machines…『分解、三段突き!!』
[論文] Factorization Machines (ICDM 2010) 読んだ 22:41
Factorization machines with r
Factorization Machinesについて調べてみた

References   [ + ]

1, 2, 3, 4, 5. predict(model,data.test)-target.test)^2

非負値行列因子分解(NMF)でブログ記事のレコメンドをしてみる

概要

2017年7月より当ブログにおいて、Google AnalyticsのカスタムディメンジョンにUser IDを取得して残せるようにしました。これにより、ユーザーの一人一人が閲覧した記事の分析を行うことが可能となっています。そこで今回は、記事の数も50近くなってきたことから、レコメンド手法の適用を行ってみたいと思います。Exampleデータでレコメンドをしても、ドメイン知識がないと、どれくらい良さそうな推薦なのかの判断が付きにくいと考えていたので、自分で運営しているサイトのデータであれば評価をつけやすいのではないかと思われます。
手法としてはNMF(non-Negative Matrix Factorization)を適用します。

【目次】
・前処理
・データ確認
・行列因子分解(Matrix Factorization)
・レコメンド結果の確認
・感想
・参考文献

前処理

ユーザー単位の閲覧した記事データを作るためにGAのAPIで取得したデータを整形し、集計します。このようなデータを手に入れるには自身のブログにおいて、GTM(Google Tag Maneger)を設置して、GTMのコンテナにカスタムJS変数などを格納する必要があります。詳しくはこちらのブログを参照ください。( 2016年の新定番!ユーザーエクスプローラーをもっと活用するための簡単な方法

このような形で行にユーザーが、列に記事が、各要素にアクセスの有無が入るようになっています。本来は評価データを用いますが、評価データがないので、アクセスしたかどうかの1-0データとして扱います。

データ確認

以下より、行列の要素のうち、値が入っている要素は全体の2.9%であることがわかります。参考文献は2.6%をスパースと言っていたことから、今回のデータもスパースであると考えることができます。

行列因子分解(Matrix Factorization)

行列因子分解はユーザーごとのアイテム購買履歴などのデータからなる行列の因子分解を行うもので、レコメンドにおいては因子分解の結果として、ゼロ以上の要素を持つ場合に推薦対象とするなどの活用がされています。非負値行列因子分解は要素が非負となるように制約を付けて行列を分解するもので、正の値を取ることから推薦に使いやすいとされています。

今回はNMFパッケージを用いて、ほぼデフォルトな設定で結果を眺めてみますが。本来であれば以下のような考慮が必要となります。最適化などをがっつり進めようとするとクロスバリデーションなどを行ったり、計算リソースが結構かかったりすると思われます。

  • アルゴリズムの選択
    • brunet,KL,lee,Frobenius,offset,nsNMF,ls-nmf,pe-nmf,siNMF,snmf/r,snmf/lがある。
    • デフォルトではbrunetとなっている。
  • シーディングメソッドの選択(初期値の決め方)
    • 固定値(none),ランダム(random),ica,nndsvdがある。
    • デフォルトではランダムとなっている。
  • 実行回数の設定
    • 100〜200回を選ぶことが多い。
  • 並列処理
    • 処理量が多いので最適化などを考えると並列処理も重要。
  • 因子分解ランクの推定
    • ランクの数が多いと残差は減るが、過学習になりやすい。クロスバリデーションを行う必要がある。

レコメンド結果の確認

各ユーザーに対して推薦されたアイテムのうち、比較的値の大きなものに関してコメントをしたいと思います。

ユーザー1
「XGBoostやパラメータチューニングの仕方に関する調査」を閲覧したユーザー1に対して、「XGBoostのパラメータチューニング実践 with Python」を推薦できている一方で、「OpenCV&Pythonで画像の類似度を計算させる〜イケメンの顔比較」など関係性の薄そうな記事も推薦してしまっています。

ユーザー2
「人工知能学会全国大会2017のWebマーケティングで参考になりそうな研究9選」を閲覧したユーザー2に対して、「Kaggleで使われた特徴量エンジニアリングとアルゴリズムまとめ」を推薦できている。

ユーザー3
「洋楽の歌詞データでDoc2vecを実行してみる」を閲覧したユーザー3に対して、「LDA(潜在的ディリクレ配分法)まとめ 手法の概要と試行まで」を推薦できている一方で、「ベイジアンネットワークをRのbnlearnパッケージで推定して予測してみる」と関係性の薄そうな記事も推薦している。本来、近いと思われる、「Word2Vecでクラシックの楽曲情報をコーパスとして類似度を出してみる」を推薦できていない。

感想

  • 結果に関して、納得のいくものといかないもので半々な印象でデフォルトの設定では満足できない。
  • NMFはクロスバリデーションなどにより過学習を避けた形での最適なランク数やアルゴリズムの選定、初期値の設定などが必要と思われるので、そこらへんの取り組みも今後行いたい。
  • FM(Factorization Machine)は回帰項を追加できるので、今後挑戦してみたい。
  • 1-0のデータではなく評価のデータが欲しい。

参考文献

岩波データサイエンス Vol.5
非負値行列因子分解(NMF)によるレコメンドのちょっとした例
An introduction to NMF package
非負ッ値行列・ファクトリゼーション ~ 半群じゃないから難しくないもん!

人工知能学会全国大会2017のWebマーケティングで参考になりそうな研究9選

はじめに

今更ではありますが、2017年5月に開かれた人工知能学会全国大会2017の公開資料の中から、私の本業であるWebマーケティングで役に立ちそうな研究を独断と偏見で9本ほど集めてみました。思っていたよりもWebマーケティングぽい領域が多かったので、社内での分析業務におけるアイデアに直結しそうな気がしています。

ちなみに、全ての資料はこちらにあります。

基本的に各研究ごとに
・目的と結果
・対象となるデータ
・手法の概要
・PDFのリンク
について記していきます。

紹介する研究

今回は以下の研究を紹介したいと思います。
「オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル」
「テキストマイニングを用いた転職サイトの会員離脱予測」
「インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル」
「ユーザーのページビュー系列からのコンバージョン予測」
「SNSにおけるユーザの行動のモチベーション要因の分析」
「状況に応じた楽曲推薦に向けたソーシャルデータ分析」
「テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法」
「不動産仲介マーケティングのためのユーザ行動予測」
「SUUMOでの不動産データ活用の取り組みと未来」

オンライン広告におけるスパース性と遅れコンバージョンを考慮した予測モデル

目的と結果

オンライン広告のCVR予測の精度向上を目的としている。
これまでの課題としては、
「質的変数による特徴量のスパース性」
「広告クリックからのCVまでの期間の長さ(期間が空いてからCVしたりするケースがあるので正例だったはずが負例と扱われる可能性がある)」
などがあった。提案手法により従来手法に比べ高い精度でCVR予測が可能であることが示された。

対象となるデータ

過去3週間分の広告配信データでテスト期間は7日間

手法の概要

  • 次元圧縮
    • Factorization Machine(FM)を用いて、従来のロジスティック回帰では考慮できていなかった交互作用をモデリングし、低次元のベクトル内積に分解して表現している。
  • 遅れCV問題の対応
    • 遅れてCVが発生する事象に関しては、指数分布を用いて遅れてCVする事象をモデリングするDelayed Feedback Modelを構築することで、本当は事後的にCVしそうなユーザーの推定を行っている。
  • 予測
    • これらの手法を合わせた、Delayed Feedback Factorization Machineを構築し、SGD(確率的勾配降下法)やAdaGradを用いてパラメータを推定している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/110.pdf

テキストマイニングを用いた転職サイトの会員離脱予測

目的と結果

登録情報や履歴書のテキスト情報を用いて特徴量とし、転職サイトの登録会員の離脱予測を行っている。ブラックボックスでは無い形での結果の解釈ができ、予測精度も高いことが示された。

対象となるデータ

  • 2009年10月1日〜2016年9月28日までの履歴書、職務経歴書、自己PR書、希望条件
  • 離脱会員の定義は「登録して1ヶ月以内に一度も応募しない会員」としている。

手法の概要

  • STEP1:Pythonのmojimojiというライブラリを利用してカナを全角に、数字とアルファベットは半角に変換。
  • STEP2:MeCabを用いて名詞のみ抽出
  • STEP3:「職務」「経歴」「業務」「内容」などを不用語(stop word)とした。
  • STEP4:Grid Searchでパラメータチューニングしたランダムフォレストを用いて変数重要度(Feature Importance)を出し、重要度の上位90%を占める単語以外を削除
  • STEP5:登録情報のデータ(年齢、転職回数、住所)を数値データに変換
  • STEP6:選定した特徴量を用いて決定木アルゴリズムを適用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/949.pdf

インターネット広告におけるスパースなユーザー行動ベクトルからのユーザー特徴抽出モデル

目的と結果

広告のCTR予測を行う際の特徴量が非常にスパースであることから、ユーザーをクラスタリングして広告配信に効果的なユーザーを抽出することを目的としている。研究ではCVRの高いユーザー群の抽出を可能にしている。

対象となるデータ

  • 2016年6月1日〜2016年6月21日の間のクリックやコンバージョンのデータ(株式会社アイモバイルが提供)
  • クリック実績のある広告数、コンバージョン実績のある広告数、クリックされた広告番号、コンバージョンが発生した広告番号、ユーザー番号など

手法の概要

  • 高次元スパースデータを低次元に落とし込むために、オートエンコーダを用いている。
  • オートエンコーダにより得られた特徴量をもとにユーザーのクラスタリングを行っている。(オートエンコーダは入力された情報をなるべく欠損しないように、効率的に圧縮する構造を持たせたニューラルネットワークのこと。)
  • データにおけるゼロの成分を確率的に欠損とみなして計算処理を早めている。
  • 学習モデルはAdaGrad(学習率を学習に合わせて最適化する手法)
  • 訓練データ(特徴量の数がクリックで23339個、コンバージョンで5619個)にスパースデータ許容型オートエンコーダで500次元まで圧縮し、さらに通常のオートエンコーダで146次元まで圧縮している。
  • 次元圧縮して獲得したデータに対してk-means法でクラスタリングを行い、CVRなどを比較している。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/12.pdf

ユーザーのページビュー系列からのコンバージョン予測

目的と結果

Web広告において、ユーザーの閲覧履歴からコンバージョンを予測することを目的に、Recurrent Neural Network(RNN)を用いた結果、非時系列のSVMよりもわずかばかりかの精度向上が観察された。データ数が少ない場合はSVMに軍配があがる結果となっている。

対象となるデータ

2016年7月1日〜2016年10月31日の広告の接触履歴データなど(広告の業種別データやユーザーのページビュー数)を特徴量に用いて、2016年11月1日〜11月30日までの期間を予測対象とした。データは株式会社マイクロアドが提供している模様。

手法の概要

  • Long Short-Term Memory RNN(LSTM)
    • ソフトアテンションモデル
      • 可変長の系列に対して内積で重みを算出し、足し合わせることで一部から情報を取り出すモデル。途中の層まで複数業種のデータを用いることで、複数の業種などの情報を共有することができる。(最後の隠れ層には業種別の特徴量を用いている。)
      • 勾配の計算に関してはAdamを用いて、実装はKerasを用いている。活性化関数はTanh、ドロップアウトはGaussianDropout
        としている。
    • RNNで用いる特徴量としては、特定のWebページを640種類に分類して、1日のうちに各トピックにページビューがあったかなかったかを1-0の変数にするなどの前処理を行っている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/765.pdf

SNSにおけるユーザの行動のモチベーション要因の分析

目的と結果

SNSユーザーのモチベーションの要因(一ヶ月先に投稿するかどうか)をユーザー同士の関係性(staticな関係)と、そのユーザーの周りのインタラクション(dynamicな関係)という観点から分析し、ユーザー同士の関係性とユーザー周りのインタラクションを同時に用いたモデルにおいて、それらがモチベーションの要因につながりうる傾向が観察された。

対象となるデータ

  • RoomClipという部屋の家具やインテリアの様子の写真を投稿するSNSのデータ
    • 気に入った写真に「いいね」を付けたり、コメントを送れる。
  • 2015年3月の一ヶ月間を学習期間とし、2015年4月の投稿の有無を予測対象とする。

手法の概要

  • ネットワーク特徴量
    • 各ユーザーに対して、
      • 中心性(次数中心性、媒介中心性、近接中心性)
      • クラスタ係数、PageRank、フォロー数とフォロワー数の比率、フォローしているユーザのアクティブ度
  • フィードバック特徴量
    • 特定期間中にユーザが周りのユーザから自身の投稿に対してもらった「いいね」「コメント」に対して
      • 反応の数
      • 反応を行ったユーザの数
      • 反応を行ったユーザのうち、相互フォロー関係にあるユーザからのものの割合
  • 予測器としてSVMを利用

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/534.pdf

状況に応じた楽曲推薦に向けたソーシャルデータ分析

目的と結果

ユーザへの楽曲推薦システムの構築を目的に、楽曲とその再生時の状況の関係を収集したソーシャルデータより分析している。取得したデータのうちの7%ほどではあるが、ツィート情報から楽曲と再生時の状況との関係を抽出可能であるということが示された。

対象となるデータ

2016年8月10日〜2016年9月3日の間に投稿されたツィート(66879件)

手法の概要

  • ハッシュタグ#nowplaying付きのツィートを収集して、アーティスト名や楽曲名や楽曲再生時の状況(同一ユーザの5分前後の投稿内容)を収集
  • 取得したツィートからアーティスト名、楽曲名を除去して再生時の状況を取得
  • 取得したデータからデータベースを作成

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/102.pdf

テキストマイニングを用いた口コミ分析による点数評価の信頼性確認手法

目的と結果

製品などの口コミの評価レビューに関する信頼性を確かめることを目的としている。レビューデータに対して感性評価を行い、さらにその結果に対して総合評価点数別に感性表現(Goodなど)の伴った表現の頻出ランキングを作成することで、点数が高い理由を把握しやすくなった。

対象となるデータ

ソニーの製品サイトにおける、ユーザの製品に対する評価とコメントのデータ(1406件)

手法の概要

  • テキストマイニングスタジオによる感性評価(ポジティブ、中立、ネガティブ)
  • 総合評価点数別(5段階)の「ポジティブ、中立、ネガティブ」の割合の調査
  • 総合評価4の口コミかつ中立な表現にフィルターをかけて、感性情報を有する単語と係り受け関係となった単語の頻度ランキングのTOP10を抽出

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/1115.pdf

不動産仲介マーケティングのためのユーザ行動予測 Prediction of user behaviors for real estate brokerage marketing

目的と結果

不動産紹介業において、顧客の属性情報と来店初期の行動から、来店者が最終的に商品を購買するかどうかの予測モデル(不均衡データにおける予測タスク)を構築することでマーケティングの広告効果測定に適用することを目的としている。結果として、顧客の来店後30分間という短い時間における行動だけでも識別力のある予測が可能であることが示されている。

対象となるデータ

  • オンライン不動産賃貸仲介店舗iettyの顧客データベース
    • 希望物件の情報
      • 引っ越し希望日
      • 住みたいエリアの駅
      • 間取り
      • 広さ
      • 家賃
    • 顧客属性
      • 在住の地域
      • 性別
      • 年齢
    • 行動データ
      • 登録時
        • フォームの記入にかかった時間
        • フリーコメントの長さ
        • 利用デバイス
      • 登録後
        • 初回チャット発言までの経過時間
        • 初回物件評価までの経過時間

手法の概要

  • STEP1:顧客の属性および登録初期(30分以内)の行動から特徴量を作成し、2ヶ月以内に契約すれば正例、それ以外を負例とする。(正例は619件、負例は33212件)
  • STEP2:検証用データを無作為に20%取り置く
  • STEP3:残り80%のデータに対して負例に対する、ランダムアンダーサンプリングと、正例に対するSMOTE(Synthetic Minority Over-sampling Technique)を用いたオーバーサンプリングによりサンプル数を調整する。
  • STEP4:ランダムフォレストを用いて、無効な特徴量の取捨選択や離散化のレンジ調整する。
  • STEP5:全特徴量(83次元)を二値化して、RBFカーネル(Gaussian カーネル)のSVMを適用し、様々なCやγの組み合わせを試行して、二値分類を行う。
  • STEP6:評価を予測確率の平均とAUCの2種類で行う。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/466.pdf

SUUMOでの不動産データ活用の取り組みと未来

目的と結果

物件検索ユーザーが比較検討を行いやすくすることを目的に様々な取り組みをしている。

対象となるデータ

  • 不動産ポータルサイトSUUMOのデータ
    • 行動履歴(Webサイト、アプリ)
    • 物件情報(不動産情報)
    • 街情報(独自で収集)
    • アンケート

手法の概要

  • 実活用
    • 相場推定
    • 単純な加算平均ではなく、外れ値や時系列変動、データ量などを考慮して推定している。
    • リアルタイム物件レコメンド
    • ランキング学習により推定したモデルを利用し、リアルタイムに計算を行っている。個人ごとにパーソナライズしたランキングも用いている。
    • バンディットアルゴリズムによる配信施策の最適化
    • メールやプッシュ通知などで件名やデザイン、配信時間など様々な選択肢があり、その最適なパターンを見つけるために、バンディットアルゴリズムを適用している。
  • 実験段階
    • 間取り画像の分析
    • ユーザーの求めている間取りが何なのかを画像から抽出しようとしている。
    • ユーザーの検索行動、嗜好の推定
    • ユーザーの検索行動から、嗜好性を掴み取り、レコメンドする際の理由付けができるようにモデルを作ろうとしている。

PDFのリンク

https://kaigi.org/jsai/webprogram/2017/pdf/743.pdf

感想

  • 特徴量の削減のためにランダムフォレストを適用する流れ
  • 高次元スパースデータに対するニューラルネットワークの適用
  • CVの時系列予測のためにRNNの適用
  • SNS分析におけるネットワーク特徴量とフィードバック特徴量という概念
  • 口コミデータ分析の作法(点数別に感性表現の係り受けを見る)
    など勉強になりました。Kaggleと違って日本語なのが読みやすかったですね。

参考文献

初めてのディープラーニング –オープンソース”Caffe”による演習付き
SMOTE で不均衡データの分類

Kaggleで使われた特徴量エンジニアリングとアルゴリズムまとめ

Kaggleにおいて、人によってはソリューションを書いてくれているものがあります。特徴量エンジニアリングやアルゴリズムなど業務での参考になるだろうと思われるので、仕事で関わりそうなデータという観点から4つほどですが事例を集めてみました。このような事例のまとまった本とかあったらいいのですが。

基本的に各事例ごとに
・目的
・どんなデータセット
・どんな特徴量エンジニアリング
・どんなアルゴリズム
・リンク
を記していきます。

Walmart Recruiting – Store Sales Forecasting

  • 目的
    • ウォルマートの部門ごとの売上予測
  • どんなデータセット
    • ウォルマートの売上データ
      ・店舗番号
      ・部門番号
      ・週
      ・週次の売上
      ・祝日の有無

      外部のデータ
      ・気温
      ・物価指数
      ・スーパーボウルの時期
      など

  • どんな特徴量エンジニアリング
    • 予測する売上の過去データを用いたので、特徴量は用いていません。

        ・年間における週の番号
        ・高い成長率の店舗や昨年から大きく成長している店舗に関して祝日効果の重み付け 

      を行った程度のようです。

    • どんなアルゴリズム
      • 統計学と機械学習のハイブリッドな手法のようです。SASとRを使用しているとのことです。

          統計学の手法
          1. Auto-regressive Integrated Moving Average (ARIMA)
          2. Unobserved Components Model (UCM)

          機械学習の手法
          3. Random Forest
          4. Linear Regression
          5. K nearest regression
          6. Principle Component Regression

        以上の6つのモデルから平均値をとって予測し、部門ごとにモデルを作ったようです。

    • リンク
    • Algorithmic Trading Challenge

    • 目的
      • 大規模なトレーディングにおけるマーケットの反応を予測
    • どんなデータセット
        • 株式市場の出来高に関するデータ
           ・ask(買い)の価格データ
           ・bid(売り)の価格データ
           ・建値かどうか
           ・買い手か売り手のどちらが主導したか
           ・取引高
           ・時刻
          など
    • どんな特徴量エンジニアリング
      • ・価格
         ・トレンドを除外した価格の振幅
         ・流動性ショック発生前の最後のn回の価格指数の移動平均
         ・流動性ショック発生前の最後のn回の間の価格増加
        ・流動性
        ・スプレッド
         ・bidとaskの広がり
        ・レート
         ・最後のn回のイベントにしめる注文などの数
    • どんなアルゴリズム
      • ・ランダムフォレストを用いた変数選択
         【工程1】
         ・全ての特徴量を利用して訓練する
         ・テスト集合に対するモデルのパフォーマンスを計算する
         ・特徴量の重要度をランク付けする
         ・複数のサブセットから最も変数重要度の高い特徴量セットを作る
         ・最も平均二乗誤差(RMSE)が低いサブセットに決める
         【工程2】
         ・工程1で決めた特徴量から意味的に似ている特徴量を選ぶ
         ・工程1で選ばれていない特徴量を選択する
         ・RMSEが低くなるなら、意味的に似ている特徴量を除外する
         ・改善しなくなるまで続ける
         【工程3】 
         ・工程1〜2で選ばれて意味的に直交(独立)しているかどうか考慮して、工程1で除外されたものの中から特徴量を選ぶ
         ・RMSEが低くなるなら、工程1の特徴量にその変数を加える
    • リンク
    • Predict Closed Questions on Stack Overflow

    • 目的
      • 質問が閉じられるかどうかを予測
    • どんなデータセット
      • ・質問者の質問のその当時の回答数
        ・タイトル
        ・bodyテキスト
        ・タグ
        ・閉じられたかどうか
    • どんな特徴量エンジニアリング
      • ・タイトル、bodyテキスト、タグをVowpal Wabbit formatに変換
        ・ユーザーの評価や投稿数なども利用
    • どんなアルゴリズム
      • Vowpal WabbitというMicrosoftやYahoo!が出資している機械学習ツールを使い、多クラス分類を行ったようです。カテゴリカルな変数をone-hotに変換する必要がなく、楽に分析できるようです。
    • リンク
    • Outbrain Click Prediction

    • 目的
      • ユーザーにレコメンドするコンテンツのクリック予測
    • どんなデータセット
      • ・ユニークユーザーID
        ・ドキュメントID
        ・デバイス
        ・流入経路
        ・クリック
        ・プロモーションしたコンテンツID
        ・ドキュメントの詳細情報
        ・ドキュメントのトピック情報
    • どんな特徴量エンジニアリング
      • 重要な特徴量
        ・表示されてからの1時間後、1日後、1日以降のコンテンツのページビュー
        ・FFM(Field-aware Factorization Machines)を用いて、おのおの競合している広告のデータを作成
        ・ユーザーごとのクリックした際の流入経路やドキュメントの組み合わせ
         80回よりも少ないイベントのデータは切り捨てている
        ・ユーザーごとのページビューしたドキュメント
        ・広告クリックの1時間以内にクリックしたドキュメント
        ・広告のカテゴリーとドキュメントのカテゴリーの相互作用項
        ・現在時刻とドキュメントが表示された時刻との差分の対数
        ・ユーザーが同じカテゴリーや同じトピックの広告ドキュメントを見たかどうか
        ・過去にその広告を見たかどうか、それをクリックしたかどうか(広告主、流入経路、カテゴリー、トピックも同様に)
        ・将来的にその広告や広告ドキュメントを見たかどうか、将来的に見てなくても同じキャンペーンの広告を見ているかどうか
    • どんなアルゴリズム
      • 用いたモデル
        ・LibFFM
        ・Vowpal Wabbit FTRL(ロジスティック回帰でのL1・L2正則化)
        ・Liblinear
        ・XGBoost
        ・Keras
        ・Logistic regression
        ・SVC
    • リンク
    • 感想

      調べてみて、複数の時系列モデルの予測結果の平均値で予測する手法、特徴量の選択をstepAICのようにランダムフォレストで行う手法、Vowpal Wabbit(今回の2つのソリューションで扱われていた)などを新たに知れました。Kaggleには他にもKernelという手法をシェアする場があるので、その情報も今後キャッチアップしていきたいと思います。

      参考情報

      機械学習コンペティションの進展と今後の展開

    ベイジアンネットワークをRのbnlearnパッケージで推定して予測してみる

    ベイジアンネットワークの知見が無かったので、調べた情報をまとめています。一応、載せているスクリプトでRを用いて予測するということができます。

    【目次】
    ・ベイジアンネットワークとは
    ・ベイジアンネットワークの用途
    ・ベイジアンネットワークの推定のステップ
    ・Rでの実行例
    ・おまけ:Webサービスへの応用例
    ・参考文献

    ベイジアンネットワークとは

    ・複数の確率変数の間の定性的な依存関係をグラフ構造によって表し、個々の変数の間の定量的な関係を条件付確率で表した確率モデル。前提として、有向非循環(グルグルと回らないグラフ)となっているグラフの構造を持つものに限定している。
    ・入力となる変数と出力となる変数はモデルの中では区別されない。
    ・時間という明確な因果関係などをモデルに組み込みやすいので、系列データなどを扱うケースが多い。モデル設計者がデータが生成されるプロセスを考慮しながらモデルを組んでいける。
    ・非循環性とd分離の仮定のみによって導かれる現在考えられる最も自然な離散モデルであり、現在の様々なモデルの中でも、最も表現力と予測力を持つモデルとされる。

    ベイジアンネットワークの用途

    ・物体追跡
    ・ジェスチャ認識
    ・Webサイトなどのレコメンデーションサービス
    ・広告配信
    ・メルマガなどの配信最適化
    など画像処理問題から消費者行動問題までいろいろな分野で活用されているようです。

    ベイジアンネットワークの推定のステップ

    モデルの選択や推定は学習 (learning)と呼ばれ、以下の2段階のステップを踏みます。

    Step1:構造学習(structure learning)…データからネットワーク構造を学習する。
    Step2:パラメータ学習(parameter learning)…Step1で学習した構造によって意味付けした分布のパラメータを学習する。

    ベイジアンネットワークの推定は条件付き確率やMAP(Maximum a posteriori)推定量などを用います。構造学習の際に、事前知識を導入することができます。

    Rでの実行例

    ・データ
    何千もの主要な免疫系細胞から取り出した11種類のリン酸タンパク質とリン脂質の測定値からなるデータです。以下のサイトよりダウンロードできます。
    Supporting Online Material Causal Protein-Signaling Networks Derived from Multiparameter Single-Cell Data

    ・パッケージ
    ベイジアンネットワークを実行できるパッケージはいろいろありますが、参考文献に従いbnlearnを用います。加えて、ネットワーク図の可視化のためにRgraphvizを用います。Rgraphvizがcranでは対応したものがなかったので、こちらを参考にして、インストールしました。
    Provides plotting capabilities for R graph objects

    ・ネットワークの図示

    ・データ確認

    ・構造学習
    データセットから、ネットワーク構造を推定します。推定するための手法は様々あるようですが、今回はヒルクライムアルゴリズムを用います。

    構造学習より得られたネットワーク構造を可視化します。因果関係がダメな感じのネットワークが出来ていないかチェックする必要がありますね。機械的に作るだけでなく、背景的知識も考慮するという進め方が推奨されています。

    ・パラメータ学習
    先ほど、データセットから求めた構造について、以下のコードでパラメータ推定します。パラメータの推定や構造推定は試行錯誤するところなので、こんな簡単に済む訳では無いようです。

    ・予測
    テストデータを用意して、データセットから求めた構造・パラメータを用いて、任意の変数の予測を行います。予測したい変数の値は欠損していたらエラーで予測してくれないですが、全部0にしておけば回ります。運用上は予測したい変数の値はわからないはずなので。

    全然45度線上に乗っていないので、あまり精度は高くないようです。

    cpquery関数と言って、条件付き確率を予測できる関数もあるようです。
    Perform conditional probability queries

    おまけ:Webサービスへの応用例

    参考文献には、Webサイトの閲覧データをもとに、ユーザーの行動を予測するというモデルの紹介がなされていました。ただ、Webサイトの場合、ページ数や商品の数・ユーザーの数も膨大なことから、ネットワーク構造の推定が難しいようです。そこで、ネットワークを作るに際して、変数を確率的潜在意味解析(pLSA)で扱いやすい数に絞るなどの工夫をされていました。自社のサイトに関しても適用する際に、変数の多さは待った無しだと思うので、いざ適用する際は情報圧縮技術を駆使したいですね。

    参考文献

    ベイジアンネットワーク技術 ユーザ・顧客のモデル化と不確実性推論

    確率的グラフィカルモデル

    Learning Bayesian Networks in R an Example in Systems Biology

    グラフィカルモデル入門

    ベイジアンネットワークを用いたWeb レコメンデーションシステムの開発

    PRML8章