APIでYouTubeの外れ値動画はどう見つける?
キーワードで動画をまとめて取得し、その再生数の中央値を出し、再生数が中央値の5倍以上になる動画を抽出します。この比率が外れ値スコアで、ScavioのYouTube検索のようなAPIなら再生数・高評価・コメント数をJSONで返してくれるので、ブラウザを一切触る必要がありません。最近Redditのある投稿者がまさにこれをやる「外れ値ファインダー」をオープンソース化し、同じサブレディットのデータサイエンティストは、外部から測れるのはインプレッションの減衰ではなく再生数ベースの外れ値だけだと示しました。
外れ値動画とは何か?
外れ値とは、その比較対象グループの平均的な成績を大きく上回る動画です。比較対象グループとは、あるチャンネルの最近の投稿か、あるニッチの検索上位結果のどちらかです。式はシンプルです。
outlier_score = video_views / median_views_of_peer_set
平均ではなく中央値を使ってください。たった1本のバズが平均を押し上げ、ほかのブレイクをすべて覆い隠してしまいますが、中央値は「ふつう」がどのくらいかに固定されたままです。スコア1.0はちょうど平均。スコア5倍以上は分解する価値のある強い外れ値で、そのテーマ・タイトル・サムネ形式が抜きん出たのには理由があります。約2倍未満はノイズです。多くの投稿者が5倍以上の層を調べるのは、そこに再現できるパターンが隠れていることが多いからです。
Python: ニッチを取得し、中央値を計算し、外れ値を抽出する
以下はScavioのYouTube検索を呼び、再生数を取り、5倍以上のものをすべて出力します。キーを入れればそのまま動きます。
import requests
import statistics
API_KEY = "sk_live_..."
NICHE = "home espresso setup"
THRESHOLD = 5.0
resp = requests.post(
"https://api.scavio.dev/api/v1/youtube/search",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"search": NICHE},
)
resp.raise_for_status()
videos = resp.json()["videos"]
views = [v["view_count"] for v in videos if v.get("view_count")]
median = statistics.median(views)
for v in videos:
vc = v.get("view_count") or 0
score = vc / median if median else 0
if score >= THRESHOLD:
print(f"{score:.1f}x {vc:>10,} {v['title']}")フィールド名は実際のレスポンスの形に依存するので、view_countやvideosが合わなければまず1件を出力して確認してください。1回の呼び出しは1クレジット($0.005)なので、10個のニッチを走査しても5セントです。
JavaScript: fetchで同じ呼び出し
const resp = await fetch("https://api.scavio.dev/api/v1/youtube/search", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ search: "home espresso setup" }),
});
const { videos } = await resp.json();
const views = videos.map((v) => v.view_count).filter(Boolean).sort((a, b) => a - b);
const median = views[Math.floor(views.length / 2)];
const outliers = videos.filter((v) => (v.view_count || 0) / median >= 5);
console.log(outliers);正直なトレードオフ: これは発見のためのデータで、チャンネル分析ではない
Scavioが返すのは、公開の再生数・高評価・コメント数つきのランク付き検索結果です。発見や、複数ニッチを高速に横断スキャンするのにまさに向いていて、1回1クレジットです。返ってこないのは動画ごとの非公開の時系列、つまりインプレッション数、クリック率、平均視聴時間、視聴維持カーブです。これらはログインの向こう側にあります。だから再生数ベースの外れ値は「その動画が伸びた」ことは教えてくれますが、サムネがクリックを勝ち取ったのか、テーマが視聴を引き留めたのかまでは教えてくれません。
検索結果を超えた動画ごとのメタデータが必要なら、POST https://api.scavio.dev/api/v1/youtube/metadataと組み合わせて特定の動画をより詳しく取得できます。ただし自分のチャンネルのインプレッションやCTRの減衰には、YouTube Studioと公式のYouTube Data APIが完全に勝ります。インプレッション減衰を測ったRedditのデータサイエンティストがStudioのエクスポートで作業していたのは、まさにこの理由からです。Scavioは公開パフォーマンスを外から見る望遠鏡、Studioは自分のファネルを内から見る視点です。
なぜ公開検索のスクレイピングよりAPIが優れているのか
YouTubeの検索結果は公開かつインデックス済みなので、構造化APIならプロキシのローテーションもCAPTCHA突破もヘッドレスブラウザの世話も要らず、きれいなJSONを返してくれます。問い合わせれば再生数とタイトルが返ってきます。落とし穴は上のトレードオフと同じで、これは公開された発見用データです。チャンネルの非公開指標への裏口ではなく、どんなAPIも他人のインプレッションやCTRは渡してくれません。分析ダッシュボードではなく、調査用の望遠鏡として扱ってください。
判断のルール
多くのニッチをスキャンして伸びるテーマを探し、公開された外れ値から勝てるタイトルや形式を逆算したいなら、1回数セントで使えるScavioのような検索データAPIを使ってください。動画ごとに深掘りしたいときは/youtube/metadataと組み合わせます。問いが自分のインプレッション・CTR・維持率に関わった瞬間に、YouTube Studioか公式Data APIへ切り替えてください。外れ値探しは発見、チャンネル最適化は分析であり、1つのツールが両方のふりをすべきではありません。