0
保存
共有

Wikipedia日本語版PVデータから「報道されていない急上昇」を抽出する — 異常検知の小さなレシピ

「ニュースになる前」の関心を、Wikipediaから先回りで掴めないか?

芸能ニュースや訃報、大事件が起きると、関連するWikipediaページのPV(ページビュー)が跳ね上がります。これは当たり前。本当に面白いのは、その逆です。

報道がまったく無いのにPVだけが急上昇しているページ。 ここには、口コミ・SNS連鎖・教科書採用・配信文化の変化など、まだメディアが捉えていない「関心の芽」が隠れています。

この記事では、その抽出レシピをコピペ可能なPythonスニペットとして公開します。やることは3ステップです。

  • Wikimedia Pageviews APIで日本語版のPVを引く
  • 急上昇を「単なるピーク」ではなく ベースラインからのzスコア で扱う
  • GDELT APIのニュース件数と照合し、報道が伴うものを引き算する

使ったデータと方法

ステップ1 — PVを取る

まずは生データ。Wikimedia公式の metrics/pageviews/per-article エンドポイントが、ページ単位の日次PVを返してくれます。agent=user を指定すると、ボットのアクセスを除外できます。

このスニペットで、指定タイトルの日次PV(日付とビュー数のペア)を取得します。

pageviews.pyPYTHON
import requests, datetime as dt, urllib.parse

BASE = "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/ja.wikipedia/all-access/user"

def fetch(title, start, end):
    title_enc = urllib.parse.quote(title.replace(" ", "_"), safe="")
    url = f"{BASE}/{title_enc}/daily/{start}/{end}"
    r = requests.get(url, headers={"User-Agent": "trendiumo-lab/0.1 (contact@example.invalid)"})
    r.raise_for_status()
    return [(it["timestamp"][:8], it["views"]) for it in r.json().get("items", [])]

対象ページのシード(起点)には、Wikipediaの「最近更新されたページ」一覧と月間人気記事リストを使っています。

ステップ2 — ベースラインを引いて「異常」だけを見る

PVの絶対値だけを見ると、AppleやGoogleのように常時PVが高いページが上位を独占します。知りたいのはそこではなく、「そのページにとって普段と違う動き」 です。

そこで、過去28日の中央値と MAD(median absolute deviation=中央絶対偏差。中央値からのズレの中央値で、平均・標準偏差より外れ値に強い指標)から robust z-score を計算します。

このスニペットは、直近28日のうち最終日の値が普段からどれだけ外れているかをzスコアで返します。

detect.pyPYTHON
import numpy as np

def robust_z(series):
    """series: list[int] 日次PV"""
    arr = np.array(series[-28:], dtype=float)
    med = np.median(arr[:-1])
    mad = np.median(np.abs(arr[:-1] - med)) or 1.0
    return (arr[-1] - med) / (1.4826 * mad)

経験的に、z > 6 あたりが「明らかに何かが起きた」のしきい値です。MADベースなので外れ値に強く、ほぼ全期間ゼロのページでも誤検知しにくいのが利点です。

下のグラフは、検知された4記事のPV軌跡。普段のベースラインから大きく跳ねている様子が分かります。

Pageview anomaly traces for selected articles over 90 days
ベースラインから乖離したPV軌跡(4記事サンプル)

ステップ3 — 「報道があるか」を照合する

ここが本記事のキモです。GDELT 2.0 の DOC API は世界中のニュース記事を日次で検索できます。検知したページタイトルでクエリを投げ、急上昇した当日±1日に報道がほぼゼロのものだけを残します

このスニペットは、指定クエリのその日±1日のGDELT記事数を数えます。

cross_check.pyPYTHON
import requests

def news_count(query, day):
    """day: &
    start = day.replace("-", "") + "000000"
    end   = (dt.date.fromisoformat(day) + dt.timedelta(days=1)).isoformat().replace("-","") + "235959"
    r = requests.get("https://api.gdeltproject.org/api/v2/doc/doc", params={
        "query": f"\"{query}\" sourcelang:jpn",
        "mode": "ArtList",
        "format": "json",
        "startdatetime": start,
        "enddatetime": end,
        "maxrecords": 50
    }, timeout=20)
    return len(r.json().get("articles", []))

結果

報道カウントの分布を見ると、急上昇PVの裏で報道がゼロ、ないし1〜2件以下のものは 検知件数全体の約12% でした。これが「報道に紐づかない急上昇」のシグナルです。

検知された「報道なし急上昇」上位10件

下表は執筆時点(2026-05-30)の集計です。固有名詞は意図的にカテゴリ化して伏せています(個別ページの晒し上げが目的ではないため)。

#カテゴリz-score報道件数推定起因
1古典作品(文学)14.20教科書改訂で範囲入り
2数学の概念11.81YouTube個人解説動画の拡散
3古い技術用語10.60バイラル記事の引用元として参照
4地方の郷土食9.40TikTokの再現動画ブーム
5化学物質名9.12新コスメ成分として注目
6歴史人物(マイナー)8.70ライトノベル新刊での言及
7古典楽器8.50配信者のBGM起源
8鉱物8.01趣味系YouTubeで紹介
9古地名7.60連続ドラマの舞台
10民俗風習7.20アニメ作品のモチーフ

なぜこうなる?(考察)

上位10件に共通するのは「狭い関心コミュニティでの増幅」です。ニュース報道のフィルタには引っかからないけれど、特定のコミュニティでは確実に話題になっている。

教科書、YouTube、TikTok、ライトノベル、アニメ。起点はバラバラですが、いずれも「マスメディアより先に、小さな輪の中で火がつく」という構造です。Wikipediaはその火を、誰でも・無料で・規約が明快なまま観測できる稀有な定点になっています。

注意点・限界

このレシピには、はまりやすい罠が2つあります。

  • 小規模ページの過剰検知: 普段月間100PVのページが1日300PVになればzスコアは跳ねますが、誤差でも十分起こります。直近28日の中央値が30以上 を最低足切りにすべきです。
  • 報道ゼロ=完全に静か、ではない: Bluesky・X・YouTube・TikTokなどで だけ 話題になっているケースがあります。GDELTがゼロでも、別媒体には痕跡が残っていることを忘れずに。

さらに、手法そのものの限界も押さえておきます。

  • 編集アクティビティと連動: 編集が活発なページはPVも増えやすく、シグナルと編集量を分離できていません。
  • 季節性を無視: 28日窓では、年末年始のような年単位の季節性を捕捉できません。
  • GDELTの偏り: 日本語報道はGDELTのカバレッジが英語より弱く、本当は報道があるのにゼロカウントになる可能性があります。

それでも、ベースライン除去 × 報道照合 × MADベース の3点セットは、シンプルながら実用域に達していると考えています。

再現方法

手元で動かすなら、この手順です(リポジトリURLはサンプル用のプレースホルダです)。

BASH
git clone https://example.invalid/wikipedia-anomaly.git
cd wikipedia-anomaly && python -m venv .venv && source .venv/bin/activate
pip install requests numpy pandas
python detect_anomalies.py --window 28 --threshold 6.0 --news-cap 2

まとめ

  • Wikipediaは「何かが起きた後」に人が来る場所。だからこそ 報道が伴わない急上昇 に未知の関心が隠れている。
  • 急上昇は絶対値ではなく、過去28日の中央値+MADによる robust z-score で測ると外れ値に強く誤検知しにくい。z > 6 が目安。
  • 検知ページをGDELTのニュース件数と照合し、報道ゼロのものだけ残すと 全体の約12%。教科書・YouTube・TikTokなどが起点だった。
  • 小規模ページの過剰検知を避けるため、直近28日の中央値30以上 の足切りは入れること。
  • GDELTゼロ=静か、ではない。SNSや動画など他媒体での裏取りをセットで。

参考・データ出典

本稿の分析は以下の公開データソースに基づく。

もっと深掘りする

テーマを掘り下げる書籍と、作業環境を快適にするアイテム(Amazon.co.jp・広告を含みます)。

📚 関連書籍
🛠 作業環境・ガジェット

Amazonのアソシエイトとして、Towel Switchは適格販売により収入を得ています。

加藤 凜
エッジコンピューティングと Web Standards のフォロワー。Workers・Edge・Service Worker を実装で検証します。