RoomClip 開発者ブログ

プロダクトKPIと数値取得方法について

こんにちは。TunnelでRoomClipのプロダクト改善を担当しております高橋です。

プロダクトと一言で言っても色んな捉え方があるかと思いますが、弊社のプロダクトチームでは、ユーザーが普段一番触れるところであるアプリの機能追加や改修、バグ修正などの開発業務から、ユーザーの課題解決や満足度向上のための諸々の施策の実行など、サービス改善につながること全般をやっております。

私自身は元々アプリのエンジニアで、現在はRoomClipのアプリを中心としたプロダクト改善のための施策運用をやっております。(その関係で、最近はアプリ開発のためのコードを書くというよりもむしろ、数値分析のためのSQLを書いていたりすることが多かったりします^^;)

今回は最初ということもあるので、プロダクトチームとして、どのような指標を扱っていて、それをどのように数値として取得しているかについて、以降で簡単にお話ししようと思います!

■ アクティブユーザー数

何はともあれ最重要指標です。何人のユーザーが使ってくれているのか。これが伸びないとにっちもさっちもいかないので、まず真っ先に見なければならない数値です。

■ 継続率

前月起動したユーザーのうち、何%が翌月も起動したか。前述のアクティブユーザー数は、DL数と継続者数に分解されますが、その後者にあたります。DL数は外部要因によるところもありますが、継続率はダイレクトにアプリ自体の質を表す指標にもなります。

ユーザーの満足度を測る指標とは何かという議論は諸々あるかと思いますが、結局はこの数値が伸びているかどうかが、アプリにおけるユーザーの成功体験及び満足度に直結していると捉えています。

■ ECサイト送客回数/アクティブユーザー数

RoomClipでは投稿したユーザーが写真に商品情報を付与する機能があり、写真を見た人はそこに写っている商品を購入サイトに行って買うことができるようになっています。この指標は、その購入サイトを何回見に行ってもらえたかというもので、この数値が売上にも大きく関わってきます。

ユーザーの利便性と収益性をいかに両立させるかは、サービス運営上の非常に重要なテーマになるかと思いますが、ユーザーは写真から商品を見つけて購入→よりよい部屋を実現できる、運営側は購入が発生することで販売手数料が得られるという図式を実現するものとして非常に重視しています。

■ 写真閲覧数/アクティブユーザー数

一人のユーザーが何枚の写真を見ているかということになりますが、この枚数が多いほど、ユーザーがサービスに没入している、と捉えています。(ここは滞在時間でもいいのですが、RoomClipではユーザーがいかに「参考にしたい、実現したい」と思えるような写真に出会えるかを重視しているため、この指標を見ています)

タイムラインをどこまで見てもらえているか、検索からどれだけ写真が見られているかといったものがここに入ってきます。

■ 1投稿あたりリアクション数

ユーザーの写真投稿に対して、いいねやコメントなどのリアクションがいくつ付いたかを取得しています。RoomClipは写真投稿のCGMサービスであるということもあり、ユーザーが投稿者と閲覧者の2つに大きく分類されます。1つのプロダクトで異なる2つのタイプのユーザーを共存させないといけない、というところにCGMの難しさがありますが、この指標は投稿者の満足度、投稿モチベーションを担保できているかを見るものです。

いいねやコメントがつかないと投稿リテンションが下がることは判明しているため、例えば閲覧者に寄せすぎた施策を打った結果、この数値が大きく下がってしまうようなことがないかをチェックしています。


これらの数値はすべてre:dashで毎日更新するよう管理し、日ごとで大きな動きがないか、毎朝チーム内で確認しております。(こんな感じです。一部都合でぼかしてます。)

re:dashを導入してしばらくになりますが、このあたりを自動でわかりやすい形で出してくれるので、手間が省けた&メンバーとの共有をしやすくなった&他のメンバーがどんな数値取得してウォッチしているかがわかる、というメリットがありました。

技術ブログなので最後一応技術的な部分というところで、上で書いた指標の一つである「写真閲覧数/アクティブユーザー数」を例に、どのようなクエリを書いて数値を出力しているかを簡単にお話しして終わろうと思います。

データを格納しているのはRedshiftで、下記2つのテーブルに、それぞれユーザーの起動と写真閲覧のイベントが格納されているとします。(※テーブル構造、カラム名等については実際のものではない部分がありますのでご了承ください。)

access_log

date user_id os
2017-01-15 02:30:49 2 ios
2017-01-15 02:30:51 3 android
: : :

view_log

photo_id date user_id os
1 2017-01-15 02:39:49 2 ios
2 2017-01-15 02:39:51 3 android
: : : :

これを元に下記のクエリをre:dashで定期的に回しています。 (やたら長くなってしまってすみません笑)

ここでのポイントは、
① WITHを使ってネストを浅くして、可読性を上げる。
② OSごとに出す(日付とOSでまとめたデータを、縦持ちから横持ちに変換する)
③ データ欠損などによる日付の歯抜けに対応する。

普通に出力する分には3.の部分までで終わりなのですが、万が一計測がバグで止まっていて日付に歯抜けが発生する場合などに備えて、4,5で対処しています。

カレンダーテーブル作成については、最初generate_series関数を使ってやろうと思ったのですが、エラーになったので、ROW_NUMBER() OVER () で連番を出すことで対応しました。(このあたり他にうまいやり方あったら教えてください)

結果こんな感じになります。日ごとにios, androidそれぞれの一人あたり閲覧数が出力されるので、これをチャートにすればいいわけですね。

date ios android
2017-01-01 XXXX XXXX
2017-01-02 XXXX XXXX
2017-01-03 XXXX XXXX
2017-01-04 XXXX XXXX
2017-01-05 XXXX XXXX
: : :

以上、簡単ではありますが、RoomClipプロダクトチームのKPIと数値取得の方法についてお話ししました。 今後は、個々の施策に踏み込んだ話や細かい計測周りについてまたお話しできればと思っております!

またどうぞよろしくお願いします。


この記事を書いた人:高橋弘

RoomClipでアプリの開発及びUI/UXの設計、サービス成長のための施策の打ち出しなどのプロダクト改善を担当しています。