Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

ブログ運営の課題を解決するために、優良Tweetを判定する機械学習モデルで改善アクションを考えた

前職で戦略コンサルタントを数年経験し、現在は日系事業会社でデータ分析見習いをしているものです。

いろいろあって、今年5月末からブログ(なぴなびのブログ)と、Twitter(@napinavi)をはじめました。
それから1ヶ月が経過して、データが蓄積されブログ運営の課題が見えてきました。

この記事では、ブログのKGI(滞在時間)を一つのビジネス目標と見立て、KGI改善のために、Twitter分析をした内容について書きたいと思います。
自分自身のTwitter投稿データ(Twitter Analyticsから取得)を使い、いつどんなTweetをすれば高いエンゲージメント率1)が得られるのか、機械学習でアプローチしています。

エンゲージメント率とは、インプレッションに対してどれだけ反応(いいね、返信など)があったかを表す指標です。

お品書き

  • 分析背景
  • 分析結果
  • 分析データ
  • 目的変数・説明変数のデザイン
  • モデリング
  • モデルの検証
  • シミュレーション
  • 今後の課題

分析背景

ブログをはじめて1ヶ月経過したので、現状把握のためにKPI管理をはじめました。

ブログ総滞在時間をKGIとして、以下のような構造でKPIを考えています。
私の運営するブログの集客の大半は、Twitterに依存しているため、Twitterからの送客を意識した構造で整理しました。
Twitter&Blog分析.jpg

KGI/KPIは、下図の推移を辿っています。
今更ですが、KGIであるブログ総滞在時間が伸び悩んでいることを認識しました笑。
この1ヶ月で30記事ほど記事を書き、フォロワーさんが500名程度まで増えたことを踏まえると、あまりよろしくない状況だと認識だと思われます。

KGIの伸び悩みの原因をKPIに掘り下げると、頁あたりの平均滞在時間の減少、ユーザー/エンゲージメント(Tweetに反応したユーザーがどれだけブログに流入したか)に課題があるようでした。

Twitter&Blog分析 (1).jpg

ちなみに、上記図表にある「ちょっとだけバズった記事」はこちら。

ユーザー/エンゲージメントを高めるためのアクションとして、

  • ①相性の良いフォロワーさんを獲得する
  • ②ブログに送客するコンテンツを増やす
  • ③ブログ送客の投稿の文章を練る
  • ④フォロワーさんに関心を持ってもらえるよう日々のTweetの質を高める
  • ⑤フォロワーさんが再訪したいと思えるようブログのコンテンツの質を高める

などが考えられますが、今回は、Twitter Analyticsのデータで実現できそうな④フォロワーさんに関心を持ってもらえるよう日々のTweetの質を高めるにチャレンジしたいと考えました。

分析結果

現状22%の優良Tweet2)比率を数pt高めるアクションの導出ができました。
最初に断っておくと過去1ヶ月間のTweetデータ(約160件程度)しかないため、テキスト解析などのリッチな分析はしていません。

2) 優良Tweet比率の定義:エンゲージメント率6%以上のTweet(詳細は後述します)
Twitter&Blog分析 (2).jpg

分析データ

今回の分析対象は、手軽に入手出来るTwitter Analycticsのデータに限定しました
Twitter Analyticsでは、次のデータ項目が取得可能です。

  • ツイートID
  • ツイートの固定リンク
  • ツイート本文
  • 時間
  • インプレッション
  • エンゲージメント
  • エンゲージメント率
  • リツイート
  • 返信
  • いいね
  • ユーザープロフィールクリック、etc

一方、フォロー・フォロワー数、自分のエンゲージ履歴(いいねなど)が取得できないので、注意が必要です。
これらを取得するには、Twitter APIを使う、Twitter分析サービスを使うなどのアプローチが必要だと思います。

目的変数・説明変数のデザイン

目的変数

Tweetの質を判断する上で、エンゲージメント率が一つの指標になると考えています。
過去1ヶ月のエンゲージメント率の分布は以下の通りです。

Twitter&Blog分析 (3).jpg

まず悩むのが、回帰問題にするのか分類問題にするのかです。
今回、データがそれほど多くない状況下で、回帰問題に取り組むのは、難易度が高いと考えました。

次に、優良Tweetかどうかの閾値を決める必要があります。
閾値を決めるに当たって、通常のTweetと、返信、引用リツイートなどのタイプによって、エンゲージメントが異なるという点を加味する必要があると考えました。
返信はインプレッションが少なく、エンゲージメント率がバラけやすいので、これを除いたヒストグラムを観察することにしました。

Twitter&Blog分析 (4).jpg

ヒストグラムを観察した結果、以下の理由で、0.06(6%)を閾値に設定しました。

  • 6%以上に設定すると、優良Tweet比率が20%下回るので分析問題として辛い
  • 日々の平均エンゲージメント率が5%くらいなので、6%以上いけば上出来だと思える

説明変数

今回、準備した説明変数は以下の通りです。
データ量が少ないので、必要最低限のものにしました。

下記のうち、Tweet Type、Tweet内容種別は、データから直接判別できないため、手動でアノテーションを行いました。
Tweet量が増えたら、これらの分類を予測するようなモデルが必要になるかもしれません…笑

Twitter&Blog分析 (6).jpg

目的変数と説明変数の関係も示しておきます。
Twitter&Blog分析 (7).jpg

image.png

モデリング

今回は、決定木(dtree)、ランダムフォレスト(rf)、サポートベクターマシン(csvm、lsvm)、ロジスティック回帰(logistic)をフィットさせてみました。

学習・検証・テストデータのパーティションは以下のような考え方で行いました。
Twitter&Blog分析 (9).jpg

コードなどの詳細は割愛します。

モデルの検証

AUCスコアでモデルを比較します。データ量が少なく不安だったのですが、kmeansでAUC 0.8以上とそこそこ良い精度が出せているようです。
Twitter&Blog分析 (10).jpg

念のため、リフトチャートで確率予測が当たっているかを確認します。
テストデータ量(約40件)の都合上、ビン数は4としています。±0.1のブレはありますが、概ね予実があっている気がしますので、このモデルを信用することにしましょう笑
Twitter&Blog分析 (11).jpg

シミュレーション

モデルが確からしいことが確認できたので、改善アクションにより説明変数を変化させた場合に、どのくらい優良Tweet比率が改善するのかシミュレーションをしてみたいと思います。

現実味にかけるかもしれませんが、過去のTweetで、ある説明変数を全て同じ値に振り切った場合の効果をシミュレーションすることで、アクションの効果を見積もります。部分依存と呼ばれているヤツです。

下図のバーの値は、現行の優良Tweet比率22%が、説明変数の変化により何pt改善(または改悪)するのかを示しています。

例えば、時間帯別のhour_F_05_21_23のバーが0.07くらいになっていることの意味はこうです。
もしも過去の全ツイートを21-23時に投稿していたら、7pt優良Tweet比率が改善(22%→29%)したということです。
バーが高い値に振り切れている説明変数ほど、大きなアクションの効果が見込める、と解釈できます。

Twitter&Blog分析 (16).jpg

Twitter&Blog分析 (17).jpg

Twitter&Blog分析 (18).jpg

Twitter&Blog分析 (19).jpg

上記の図表をまとめるとこういう結果でした。

  • 全Tweetを21-23時に投稿すると、優良Tweet比率が7pt改善する
  • 全Tweetを日曜日に投稿すると、優良Tweet比率が20pt改善する(←ちょっと怪しい)
  • 全Tweetが通常Tweetや他人への返信だと、優良Tweet比率が3-4pt改善する
  • 全Tweetが日常ネタだと、優良Tweet比率が4pt改善する(←肌感的に?な結果です笑)
    • 逆に、全Tweetが他人の記事や投稿の紹介だと、優良Tweet比率が8pt悪化する
  • 全Tweetで画像添付があると、優良Tweet比率が50pt改善する
  • 全Tweetで改行回数が4回だと、優良Tweet比率が4回だと優良Tweet比率2pt改善する
  • 全Tweetで文字数(URL含む)が160字以上だと、優良Tweet比率が2-3pt改善する

2点目の曜日別、4点目のTweet内容種別に関する示唆には疑問が残りますが、他は納得できるものでした。
良質Tweetであるかどうかには、Tweet内容自体の良し悪しが相当効いているはずなのですが、今回のモデルでは説明変数にうまく反映できていなかったのが原因だと思われます。

日曜日、画像添付有が改善効果2桁台となっていますが、全Tweetで画像添付したり、全Tweetを日曜日に投稿するのは現実的ではないので、実際には数ptくらいの改善効果になるのでは、と考えています。

よって、再掲となりますが、以下の結論になると考えました。
Twitter&Blog分析 (2).jpg

今後の課題

繰り返しになりますが、Tweet内容自体の質を評価する仕組みがないと、正しく因果効果を予測出来るモデルを作ることが困難だと考えています。そもそも、「質は自分で担保するんだ!」という考え方があっても良いかもしれませんが、仮にデータを使うなら、以下のアプローチが考えられると思いました。

  • 自分のTweetのデータを長期間大量にためて、テキスト解析によりTweetの内容込みで評価出来るようにする
  • 他人のTweetデータを大量にためて、テキスト解析によりTweetの質を評価するアルゴリズムを作り、自分のTweetに適用する

果たして、そこまでする価値があるのか問題はありますが、技術向上のトレーニングとしては良いかもしれません笑

もう少し現実的な展開として、このモデルを使って、最適な時間帯・曜日に予約投稿する仕組みが作れると良いなあ、と思いました。

最後に

長文にお付き合いいただきありがとうございました!
またどこかでお会いしましょう!!

ご興味を持っていただいた方へ。
分析背景でご説明した通りの状況ですので、ブログ(なぴなびのブログ)の閲覧や、Twitter(@napinavi)のフォロー歓迎しております!笑

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?