KPIを見易くするために頑張った話


Cluster,Inc. Advent Calendar 2018、5日目の記事です。

クラスター社ではOKRを定めて仕事を進めていて,KR(Key Result)を主にRedashでまとめて見れるようにしています.

どういう数値(グラフ)の見せ方をすれば勘違いや誤解が生まれないかを模索しながら改善していった記録を紹介します.


1. とりあえず実績値をそのまま見せる

image.png


  • まぁとりあえず...という感じ

  • OKRでは3ヶ月程度の期間を通してKRを追うため,実績だけ見せられても微妙だった


    • 目標にどれだけ足りないのか? あとどれぐらい期間があるのか? などがパッと判断できない



SQLをがんばって,x軸をOKRの期間に,y軸をKRの目標数値に固定することもできましたが,KRはストレッチゴールを置くという制約とあいまって期間の最初のほうは実績値が小さすぎになり何もワカラン...というグラフができたりしましたので却下😔

という感じだったので次


2. 予測線を出してみる

image.png

実際にSlackに投げられた画像です.


  • 単純に線形回帰してみただけですが,この期間だと順当にいけばここまでか〜,みたいなのが見易くなりました

  • あくまで赤は予測線,青は実績値だったのですが,赤線の通りに進んでるからOK(実績値から引いてるので当然そうなる)という見方をする人が出てきてしまいました

というわけでこれもイマイチだったねということで次


余談:Redashで線形回帰する小技

RedashはSQLを書くしかないので,素直にやるなら線形回帰の式をSQLで書くことになります.

ただどう考えても面倒だったので,Google Spreadsheetと連携する形で実現することにしました.


Redashで元ネタを生成する

単純に実績値だけを取るクエリを書きます.

できたら実行/保存して,結果をCSVで取れるURLをコピっておきます.また,自動更新をONに(更新間隔は適宜)しておきます.

image.png


Redashのクエリ結果(CSV)をGoogle Spreadsheetに取り込む

image.png

Spredsheetのimportdata関数1で外部のCSVを取り込めるのでサッと取りこみます.

あとは LINEST関数 でえいやっと傾きと切片を求めておきます.

あとは別シート(※後述)で,求めたパラメータをもとに期間内の各日付における予測値を算出しておきます.

image.png


Google SpreadsheetをRedashに取り込む

ここまでで,実績値と,それを使った線形回帰による期間内の予測値が手に入ったので,今度はそれをRedashに持ってきます.

データソースとしてGoogle Spreadsheetを追加 + 上で作ったSpreadsheetの共有設定にRedashを追加(GCPのService Accountの設定が必要)したうえで,

image.png

とすると,SpreadsheetのデータがRedashで見れるようになり,エイヤッとまとめてグラフにすると,実績値と線形回帰の結果をいい感じに同時に表示できるようになります.

image.png

ちょっと回り道感はありますが,SQLで頑張りすぎる必要がなくなるのと,グラフ化や通知は(Redashのbotを使ってるのもありますが)再利用できて,むしろメンテナンスはしやすくなりました(当社比)


3. 現実との乖離を分かりやすくする

image.png

2で作ったシートに,$(目標数値 - 実績値) / 日数$から計算される目標値を追加しました.

ここまでやると,現実と目標数値にはだいぶ乖離があることが一目瞭然になり,このグラフを見て誤解を生むことは概ね無くなった気がします.(目標が高すぎたのはまた別の話...😇)


まとめ


  • 毎日見る数値/グラフはその意味がパッと見で把握できるようになっていると説明の手間なども無くなって捗る

  • SQLだけで頑張らず,ツールごとの得意分野を組み合わせて使と捗る





  1. importdataは1時間1回ぐらいの頻度で勝手に取りにいってくれる(閉じていても大丈夫)ようです.