Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Marketing×Python/Rで頑張れる事例16本ノック

3,463 views

Published on

・Tokyo Marketers Talkでの発表資料

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Marketing×Python/Rで頑張れる事例16本ノック

  1. 1. Marketing×Python/Rで頑張れる事例16本ノック 2018/04/10 Tokyo Marketers Talk Mr_Sakaue
  2. 2. ・Twitterアカウント名:Mr_Sakaue ・経歴:某大学院で経済学修士     渋谷のベンチャー企業に新卒で入社     Webマーケティング周りでの雑務     をこなす。 ・スキル:R少々、Python少々 ・趣味:ブログをやっています。     「かものはしの分析ブログ」      →データを集めて調理するブログ 何者か
  3. 3. ・マーケティング課題にデータ分析の適用を始めました。 ・マーケティング課題にPythonやRの力で向き合うと得られそうなご利益  ・手法やライブラリなどの紹介 ※話さないこと  ・各手法の細かい説明 ※※NGワード  ・それTableauでもできますやん 今日伝えたいこと
  4. 4. ・Python  ・汎用のプログラミング言語  ・わかりやすいコードが特徴  ・科学技術系の研究で多用されており、それに派生したライブラリが充実 ・R  ・統計解析に特化したプログラミング言語  ・様々な統計解析手法をカバーするライブラリ群が魅力 Python/Rとは
  5. 5. メリデメ for マーケター メリット デメリット Python ・Rよりも計算が早い ・大きなデータも扱える ・機械学習系のライブラリが充実 ・RよりもDS界隈では人気 ・プログラミング初心者には若干厳しい (最近はAnaconda入れたら大丈夫かも ) ・同じことをRでやるよりもコードが長くなりが ち(汎用言語なので) R ・Marketer Friendly(Excellで慣れ親しんだ 行列を使えたり、デフォルトでも色々分析で きる) ・統計解析系が充実、機械学習系も十分に ある。 ・大きめのデータで動かない ・困った時にググりにくい
  6. 6. ノック開始!
  7. 7. 状況:営業が蓄積したデータの分析依頼をされたが、    そのデータがそのまま分析していいのか気になる。 アプローチ:pandas-tdを使ってTresureDataからデータを取得       pandasで日付データから月のついたちデータを生成       欠損データに関しては欠損確認用のデータを生成       月をもとにgroupbyを行い、その結果を時系列プロット ご利益: ・もらったデータの時系列的なムラを確認し、怪しい傾向を分析着手前に気付ける。 ・欠損の傾向から、データ蓄積に問題が生じてそうな兆候に気付ける。 Knock1:時系列プロット
  8. 8. dataset.groupby('month').agg([np.mean]).plot(subplots=True, figsize=(15, 200)) 1行で時系列プロットや!
  9. 9. 状況:生アクセスログからCVしている人とそうでない人の差を見つけたい。 アプローチ:pandas-tdを使ってTresureDataからデータを取得       numpyで正規表現でページカテゴリーを付与       pandasでCVする前までのセッションのインデックスで絞り込み       行がストレージクッキー、列がページカテゴリーのピボットテーブルを       作成 ご利益: ・SQLでできるが、データサイズが大き過ぎなければコードも短いしサクッとできて便利。たま に買い切り型の広告系のログだとSQLじゃない環境だったりするので、その時は便利。 Knock2:ピボットテーブル
  10. 10. #ユーザーごとに触れたページのカテゴリ別に集計する pageview_table = pd.pivot_table(data=result , fill_value=0, index="storage_cookie", columns="page_category",aggfunc = { 'page_category' : 'count' } )
  11. 11. 状況:生アクセスログから、あるページを触れた人がどのようなページを見ているのか傾向を 知りたい。(平均値は嘘をつくのでできればヒストグラムがいい) アプローチ:先ほど作成したピボットテーブルに対して、pandasで       groupbyしてplotでヒストグラムを指定 ご利益: ・エクセルで多数のヒストグラムを作るとなるとツラミがあるが、どんなにデータの種類が多くて も1行で可視化できる。 Knock3:ヒストグラム
  12. 12. dataset[dataset.ef_flag == 1].filter(regex=target_column).plot(subplots=True ,kind="hist",figsize=(15, 100), bins=200, xlim=[1, 100 ], ylim=[0,1000 ])
  13. 13. 状況:NPSなどのデータがどのような変数と相関してそうか細かく見たい。 アプローチ:ExcelなどのデータをRにインポート       Rのggplot2のgeom_pointとfacet_gridを適用       4次元分のデータを一つの散布図で描写 ご利益: ・各属性ごとに、NPSとの相関の強さは変わってくるはずで、その傾向を簡単に見れる。もは やExcelで同様のことをしようと思えない。 Knock4:散布図
  14. 14. 状況:アクセスログをそのまま分析しても傾向が見れず捗らない。 アプローチ:セッションカウントデータの標準化       Pythonのscikit-learnでチャネルクラスタリング       同様にページカテゴリクラスタリング       ベストなクラスターの数を推定し、適用       クラスターごとにKPIを繋いで傾向を把握 ご利益: ・サービス理解が浅い段階で使うと、素早く主要なユーザーの傾向を掴める。 ・クラスターごとにさらに深ぼって分析できる。 Knock5:ユーザークラスタリング
  15. 15. KPIたちページカテゴリーたち ≈ç ≈ç ≈ç ≈ç ≈ç ≈ç ≈ç ≈ç ≈ç
  16. 16. 状況:ユーザーがCVするかどうかを決めるキーファクターを見つけたい。 アプローチ:作ったクラスターごとにscikit-learnのDecisionTreeを適用 ご利益: ・サービス理解が浅い段階で使うと、CVに近い行動の把握ができる。 ・意外な傾向が見つかれば、サイト改善の施策などに繋がる。 ・分析後は実際にどれくらいの対象ユーザへのインパクトがあるのかを検算。 Knock6:決定木
  17. 17. 数行のコードで計算してくれる! tree = DecisionTreeClassifier(criterion = 'entropy', max_depth = 3, random_state = 0) tree.fit(X, Y) export_graphviz(tree, out_file='tree.dot', feature_names=list(X.columns))
  18. 18. 状況:来月の応募数を知りたい アプローチ:応募ログデータ、営業日数、最終営業日などのデータを収集       Facebook社の提供しているProphetを用いて予測       直近数ヶ月のRMSE (Root Mean Squared Error)の低いモデルを採用 ご利益: ・月間目標を目指す際に、10日や15日時点でそこそこの応募数がわかるので、  目標乖離時にアクションを取るべきかの判断をすることができる。 Knock7:時系列予測
  19. 19. Prophetを使って、新幹線予約の検索クエリのトレンドを予測 12月25日12月3日~12月9日12月1日 大人の余裕前のめり 後の祭り
  20. 20. 状況:運用型広告での競合の動きを捉える アプローチ:自社と競合サイトの時系列のインプレッションデータなどを用意       RのVARパッケージを利用       単位根検定などを経て、VARの推定       インパルス応答関数からどの競合が自社に影響があるのか分析 ご利益: ・特定の競合のインプレッションが自社サービスの指標にどのように影響を与えるのかを知っ た上で、運用型広告をまわせる。 Knock8:VAR(Vector AutoRegression)
  21. 21. 状況:顧客生涯価値(LifeTimeValue)をもとめたい。 アプローチ:顧客との取引レコードを用意       解約の定義を決め       Rのflexsurvパッケージを利用       1~3年間の売上を予測する上でパフォーマンスの良い手法を採用 ご利益: ・より精度の高いLTVを手に入れることができる。 ・オレオレな謎エクセルではなく、再現性のあるRコードが残る。 Knock9:LTVの推定
  22. 22. 価格一定にして継続確率を 掛け合わせたものをn期分足 し合わせたものを採用
  23. 23. 状況:フリーテキストばかりのデータから意味のありそうな特徴を掴みたい。 アプローチ:フリーテキストまみれのデータと解約者のデータを繋ぐ       6ヶ月後に解約するかどうかのデータを作る       MeCabパッケージでテキストを形態素解析する       解約する人としない人のテキスト上での差異を比較する ご利益: ・フリーテキストが多くても、意味のある傾向を掴めそうなので、改善のアクションに繋がる発 見があるかもしれない。 Knock10:テキストマイニング
  24. 24. MeCab neologdを使えば蒙古タンメンも分解され ずに単語を分解できる。 汗を含んでいるかどうかと、リピート率を比較
  25. 25. 状況:メディア記事の分類をしたい アプローチ:DBから記事データを取得       不用語の除去       記事の本文に対してPythonでMeCabによる形態素解析をする       Gensimでトピックを推定する       トピックごとの意味合いを解釈し記事分類に利用する ご利益: ・数百記事のカテゴライズされていない記事があったとしても、うまく推定できればいい感じに 記事のカテゴリを分けれるので便利。 Knock11:トピックモデル
  26. 26. BillboardのTop10ランクイン割合の高いトピックTop3 one,ooh,call,cause,gettin,born,day,makes,came,stand better,world,whoa,run,light,things,find,show,see,waiting stop,just,hands,put,party,crazy,live,lights,play,see 推定したトピックの記事ごとのパフォーマンスを比較してみるのも良い。
  27. 27. 状況:ユーザーが過去に見た情報に近そうな情報をしたい アプローチ:記事の本文に対してPythonでMeCabによる形態素解析し、       テキストデータを行列データに変換(行:単語、列:文書)       scikit-learnでTF-IDFを計算し、COS類似度を計算       (トピック間の類似度で出すやり方もある) ご利益: ・細かいカテゴリデータがなくても、文書内の構成単語の近さから、記事を推薦できる。うまく いけばカテゴリデータよりも精度の良い推薦が可能。 Knock12:類似度計算
  28. 28. Java Android スマホが起動中ずっと動 かしたい ブルーライトカット的なアプリを作りたい のですが、アプリを終了したら、ブルーラ イトが消えてしまいます。 スマホが起動中ずっと動かしていたいで す。 Androidアプリでセンサとのデータ受信 今現在Androidアプリでbluetoothを扱お うと考え触っていたのですが、詳しい仕 組みがわからず困っています。現在のサ ンプルコードでは接続が確認されると乱 数が表示されるようになっています。 やりたいこと Androidアプリにセンサーからデータを送 り、そのデータを表示する。 接続する機器を選択できるようにする。 過去に回答したQAサイトの質問 COS類似度が近くて、まだ回答されていな いQAサイトの質問
  29. 29. 状況:広告文を考える時に文脈的に近そうな表現を知りたい。 アプローチ:テキストデータに対してPythonでMeCabによる形態素解析       GensimでWord2Vecを適用       任意の単語を入力し、文脈的に近いものを抽出 ご利益: ・大量のデータから、コンテクストの近そうな単語の上位を知れるので、広告文のアイデア出し に使えるかもしれない。 (昔、サイバーエージェントさんがWord2Vecを広告文言の自動生成に適用していた論文を見 たことがあります) Knock13:Word2Vec
  30. 30. コンテクストの近い単語を見てみよう!
  31. 31. 状況:蒙古タンメン中本の口コミの点数の分布を知りたい アプローチ:PythonのBeautifulSoupを使い、タグを指定       口コミ点数と口コミのコメント情報を取得(紳士的に)       matplotlibで可視化 ご利益: ・手元にデータがなくても、インターネット上にあるデータをもとにマーケティングリサーチをす ることが可能。 Knock14:Webスクレイピング
  32. 32. 状況:好きな商品が値引きになった時に購入したい。 アプローチ:PythonのSeleniumパッケージを利用       定期的にログイン       価格の情報を取得       一定の価格以下ならカード情報やフォームを自動で入力       決済完了後の画面をスクショで自動撮影 ご利益: ・フォームの入力などが必須のサービスでもいろいろ自動化できる。 ※こちらも紳士的な頻度で。 Knock15:Selenium
  33. 33. 状況:分析終わったらレポートも欲しいなと言われる。 アプローチ:PythonのJupyter上でRISEパッケージを利用       jupyter notebookの1セルごとにスライドの指定ができる       指定は「見せる、独立して見せる、入れ子にして見せる、隠すなど」       指定して保存すればスライド完成 ご利益: ・分析しているjupyter notebookのソースコードをそのまま使ってスライド生成できるので、 分析+スライド作成のツラミから、かなり解放される。 Knock16:スライド作成
  34. 34. ご静聴ありがとうございました!

×