自分のベスト投稿時間を実データから出すツールを作った(後編:平均値が嘘をつくとき)

こんにちは、麗です。

前編では、CSVに時刻の列がない問題を、ポストID(Snowflake ID)から時刻を復元することで越えた話を書きました。

dev.urara.dev

後編は、実データを入れた瞬間に出てきた、もっと大きな壁のお話です。

完成したツールはこちら。

X投稿タイムヒートマップ — urara.dev

壁その2:実データを入れたら、ランキングが「成立しなかった」

ロジックができて、いざ自分の実データを入れてみました。

ここで、一番大きな壁が出てきました。

ベスト時間帯のランキングが、表示できない。

理由はすぐにわかりました。

曜日7 × 時間帯24 = 168個のマスがあるのに対して、3ヶ月分のCSVに入っていたのは数十件。

自分の場合、リプライを抜くと72件でした。

168個の枠に72件を散らせば、1マスあたり平均0.4件。

ほとんどのマスが「1件」か「ゼロ件」になってしまいます。

これでは「火曜21時が最強!」と言われても、根拠はたった1投稿。

まったくあてになりません。

実際、検証中にこんなことが起きました。

たった1件しかないマスが「平均インプレッション1693」を叩き出して、堂々と『ベスト時間』の顔をしていたんです。

その1投稿がたまたま伸びただけ。

平均でもなんでもありません。

個人のSNS分析で、平均値が平気で嘘をつく典型例です。

毎日決まった時刻に投稿している人でもない限り、誰もがこの壁に当たると思います。

解決:嘘をつかせない。代わりに「粒度」を変える

対処の方向は、二つありました。

ひとつは「1件でも表示する」。

採用したのは、もうひとつのほう。

「5件未満のマスは灰色にして、ベスト3の対象から外す」でした。

この最低件数のルールは、絶対に崩さないうえで、集計の粒度のほうを自動で粗くしていくことにしました。

具体的には、こう段階を踏みます。

  1. まず「曜日×1時間」で見る → 足りなければ

  2. 「曜日×時間帯(朝・昼・夜などのざっくり区分)」に広げる → それでも足りなければ

  3. 「時間帯だけ」「曜日だけ」まで粗くする

そして、どの粒度に切り替えたのかを画面に正直に表示します

「データが足りないので、曜日ごとの傾向に切り替えました」というふうに。

データが少ないことを隠してそれっぽい数字を出すのではなく、「今はここまでしか言えません」と正直に言う。

少ないなら少ないなりの、信頼できる答えだけを返したかったんです。

灰色のマスは、飾りじゃありません。

嘘の『ベスト時間』を生まないための、いちばん大事な機能なんです。

データは、ブラウザの外に出ない

設計で守ったことを、ひとつだけ。

このツールはHTMLファイル一枚でできていて、外部のライブラリも、サーバーへの送信も一切使っていません。

落としたCSVは、あなたのブラウザの中だけで処理されて、どこにも送られません。

アカウントの分析データという、それなりにセンシティブなものを扱うからこそ、ここは外せませんでした。

おわりに

派手なツールではありません。

やることはひとつ、「自分の投稿のベストな時間帯を、実データから可視化する」だけです。

機能を盛らず、一点に絞りました。

つまずいたのは、CSVに時刻がなかったことと、実データを入れたら件数が足りずランキングが成立しなかったこと。

どちらも「やってみて初めてわかった」壁で、Fableと相談しながら一つずつ越えていきました。

もし同じように「自分のベスト投稿時間」が気になっている方がいたら、よかったら触ってみてください。

(ご利用はXプレミアム以上に加入している方が対象です。無料プランではCSVが取得できないため使えません。)

urara.dev