← 記事一覧へ

ライブ配信のコメンター生存曲線による
コメント参加維持率の計測

個別視聴者の入退場ログが取れないライブ配信環境でも、配信を N 等分し「初期セグメントに居たコメンターのうち何 % が後続セグメントでもコメントしているか」をセグメント別に計測する Kaplan-Meier 風の生存曲線手法。視聴維持率の代替指標として有効。

公開日: 2026-05-01 著者: 君斗りんく / Kimito-Link Project ライセンス: MIT 実装: GitHub

1.解決したい課題

ライブ配信プラットフォームでは、視聴者個別の入退場時刻を取得できない場合が多い。配信者が知れる情報は通常以下に限られる:

  • 同時接続数の時系列カーブ(誰が居るかは分からない)
  • 誰がいつコメントしたかの履歴

この制約下で「配信が長くなるにつれて、初期視聴者がどれだけ離脱したか」を測りたい。同接カーブの減衰だけでは「新規流入と離脱が相殺されて減らない」ケースを見落とす。コメント履歴に基づく per-user 維持率の計測が必要である。

2.手法の概要

配信全体の時間軸を N 等分のセグメントに区切る(既定 N = 4)。各セグメントについて、そこでコメントしたユーザーの集合 Ui を作る。最初のセグメントの集合 U0base set とする。

各セグメントの生存率を以下で定義する:

retentioni = |U0 ∩ Ui| / |U0|

これにより、初期にコメントしていたユーザーがどの段階でどれだけコメント参加を続けているかが分かる。

3.アルゴリズム詳細

3-1. 入力データ

{ capturedAt: 1714532400000, userId: "u-12345" }

3-2. ステップ

  1. 有効なコメント(capturedAt が正の数 + userId が空でない)のみ抽出
  2. capturedAt 昇順にソート
  3. first / last を取得し、span = max(1, last − first) で N 等分
  4. 各コメントを bin = floor((at − first) / segSpan) のセグメントに振り分け、Set<userId> に追加
  5. U0 を base として、各 Ui との交差を取る
  6. retentionPct = present / baseUserCount × 100 を 0.1% 刻みで丸める

4.参考実装(JavaScript / 純粋関数)

export function buildCommenterSurvivalCurve(comments, opts = {}) {
  const segmentCount = opts.segmentCount > 0
    ? Math.floor(opts.segmentCount) : 4;
  const valid = [];
  for (const c of comments || []) {
    if (!c?.capturedAt || !Number.isFinite(c.capturedAt)) continue;
    const uid = String(c.userId ?? '').trim();
    if (!uid) continue;
    valid.push({ at: c.capturedAt, uid });
  }
  if (!valid.length) return { baseUserCount: 0, segments: [] };
  valid.sort((a, b) => a.at - b.at);

  const firstAt = valid[0].at;
  const lastAt = valid[valid.length - 1].at;
  const segSpan = Math.max(1, lastAt - firstAt) / segmentCount;

  const segUsers = Array.from({ length: segmentCount }, () => new Set());
  for (const v of valid) {
    let idx = Math.floor((v.at - firstAt) / segSpan);
    if (idx >= segmentCount) idx = segmentCount - 1;
    segUsers[idx].add(v.uid);
  }

  const base = segUsers[0];
  const baseUserCount = base.size;
  const segments = segUsers.map((users, i) => {
    let present = 0;
    for (const u of base) if (users.has(u)) present += 1;
    return {
      segmentIndex: i,
      presentCount: present,
      retentionPct: baseUserCount > 0
        ? Math.round((present / baseUserCount) * 1000) / 10 : 0
    };
  });
  return { baseUserCount, segments };
}

5.なぜこの設計なのか

5-1. なぜ「最初のセグメント」を base にするのか

配信開始 ~ 序盤にコメントしたユーザーは「視聴を意図的に開始した能動的視聴者」であり、最も信頼できる "母集団" である。途中流入のユーザーは流入時刻のばらつきが大きく、生存曲線の base にすると曲線の解釈が困難になる。

5-2. なぜコメント参加で測るのか

個別の入退場ログが取れない以上、視聴維持を直接測れない。コメントは「能動的に参加し続けている」シグナルなので、視聴維持の下限の代替指標として有効である(実際の視聴者は出力されたコメンターよりも多い)。

5-3. なぜ N=4 が既定か

30 分 ~ 数時間の配信を 4 分割すると、序盤・中盤前半・中盤後半・終盤にちょうど対応する。さらに細かくすると 1 セグメントあたりの観測コメ数が減って統計ノイズが増える。多くの実用ケースで N=4 が解釈と精度のバランスが良い。

6.既知の限界と拡張可能性

  • 「コメントしないが視聴している」ユーザーは捕捉できない: 生存率は実際の視聴維持率より低い値になる。
  • セグメント境界依存: ちょうど境界をまたぐタイミングでコメントが減るとノイズ的に見える。
  • 拡張: per-segment 新規流入数を併記して、生存曲線と入れ替わりの両側を可視化できる。
  • 拡張: 複数 base 比較(最初のセグメントの新規/常連/高頻度コメンター別の生存率)。

7.関連する既知技術(先行技術)

7-1. Kaplan-Meier Estimator (1958)

医学統計の生存曲線。打ち切り(censoring)を扱える点が本手法より高度だが、ライブ配信のコメント維持には打ち切りの概念が薄く、より単純な交差集合計算で実用十分。本手法は KM 推定量の離散セグメント版に相当する。

7-2. Cohort Retention Analysis

SaaS / ゲーム業界で広く使われる「コホート別維持率」分析。「日次・月次の新規ユーザーがその後の各時点で何 % アクティブか」を行列で示す。本手法はそれをライブ配信の1 配信内の時間軸に応用した特殊形である。

7-3. ライブ配信プラットフォームの維持率指標

YouTube Studio や Twitch Analytics には「平均視聴時間」「視聴者維持率グラフ」等の指標があるが、それらはプラットフォーム側の閲覧ログに依存する。サードパーティ拡張機能が公開コメント情報のみから維持率を推定する公知の実装例は、本記事執筆時点で著者は確認していない。

8.本記事の位置づけ・ライセンス

本記事は、Chrome 拡張機能『君斗りんくの追憶のきらめき』内で 2026 年 4 月 30 日(バージョン 0.1.23)に投入された commenterSurvivalCurve.js モジュールの設計思想と実装を、2026 年 5 月 1 日付で公開するものである。

参考実装は MIT、本記事文章は CC BY 4.0 のもとで自由に複製・引用可。

引用例: 君斗りんく「ライブ配信のコメンター生存曲線によるコメント参加維持率の計測」君斗りんくの追憶のきらめき、2026 年 5 月 1 日公開、https://tsuioku-no-kirameki.com/articles/commenter-survival-curve.html