2つのマラソン大会両方に参加しているランナーは10%

  2 件のコメント

昔【ランニングのブログからの個人情報特定の可能性】という記事を書きましたが、実際のところどうかなと思い、ちょっと調べてみました。

調査方法


  1. 過去一年以内のランニング大会を適当にピックアップ。
  2. PDFまたはHTMLをダウンロード。
  3. スクリプトで氏名のみ切り出し。(※ここが一番大変。若干の誤差あり。)
  4. 各レースに共通の氏名をカウント。

調査結果


No.レース1人数レース2人数両方参加[%]
1関東の有名フルマラソン17,173東京郊外30kmレース11,3551,0959.6%
2関東の有名フルマラソン17,173都内ハーフA(中規模)4,04548412.0%
3関東の有名フルマラソン17,173都内ハーフB(小規模)1,44715810.9%
4関東の有名フルマラソン17,173東京郊外トレイルラン30km1,16112410.7%
5関東の有名フルマラソン17,173南の島のフルマラソン(小規模)792151.9%
6東京郊外30kmレース11,355都内ハーフA(中規模)4,04553313.2%
7東京郊外30kmレース11,355都内ハーフB(小規模)1,44715610.8%
8東京郊外30kmレース11,355東京郊外トレイルラン30km1,16122919.7%
9東京郊外30kmレース11,355南の島のフルマラソン(小規模)792162.0%
10都内ハーフA(中規模)4,045都内ハーフB(小規模)1,4471137.8%
11都内ハーフA(中規模)4,045東京郊外トレイルラン30km1,161393.4%
12都内ハーフA(中規模)4,045南の島のフルマラソン(小規模)79230.4%
13都内ハーフB(小規模)1,447東京郊外トレイルラン30km1,161171.5%
14都内ハーフB(小規模)1,447南の島のフルマラソン(小規模)79220.3%
15東京郊外トレイルラン30km1,161南の島のフルマラソン(小規模)79210.1%

まとめ

大雑把に言うと、片方が著名な大会なら、数の少ない方の大会の10%前後の方が、両方に参加していました。両方ローカルなレースなら5%、片方がマイナー、遠く、あるいは特殊なレースだったりすると、数%以下に低下しています。

仮に2つの10,000人規模のランニング大会の10%が共通のランナーだとすると、5レースを選ぶと、全部に参加しているのが1人になる計算です。5,000人規模で5%が共通だとすると、4レース全部に参加しているのが1人(5,000->250->12.5->0.625)、1000人規模で1%なら3レースで1人になります(1,000->10->0.1)。ランニングサイト、SNS、ブログ等で参加レビュー記事を複数公開すると、ピンポイントで個人情報(名前)の特定に至る可能性は高そうです。

でも、やっぱり全参加者記録は一覧で見たいもの。ゼッケンとパスワードで自分の記録が見られても、それだけでは全体でのポジションが直感的にわからないし、一緒に参加した友人たちのタイムを見て一喜一憂もできず、つまらないですからね。

リスクと利益を天秤にかけると、現状では受け入れられる範囲かな。誰でも簡単にできる方法はないですし、そもそもここに興味を持つ人なんてほとんどいないでしょうからね。

おまけ

いったん氏名の切り出しができてしまうと、絞込み自体はスクリプト言語3行でできてしまいます。以下Pythonの例。共通なランナー数だけ表示しています。(※でも氏名の切り出しには個々のPDFに合わせていろいろと試行錯誤してコードを書かなくてはならず、こちらは一筋縄では行きません。)

2大会なら、
>>> lst=[s0,s1,s2,s3,s4,s5]
>>> for x in itertools.combinations(lst,2):
...     print lst.index(x[0]),lst.index(x[1]),': ',len(x[0].intersection(x[1]))
... 
0 1 :  1095
0 2 :  484
0 3 :  158
0 4 :  124
0 5 :  15
1 2 :  533
1 3 :  156
1 4 :  229
1 5 :  16
2 3 :  113
2 4 :  39
2 5 :  3
3 4 :  17
3 5 :  2
4 5 :  1
>>> 

3大会でもほとんど同じ。
>>> lst=[s0,s1,s2,s3,s4,s5]
>>> for x in itertools.combinations(lst,3):
...     print lst.index(x[0]),lst.index(x[1]),lst.index(x[2]),': ',len(set.intersection(x[0],x[1],x[2]))
... 
0 1 2 :  107
0 1 3 :  36
0 1 4 :  34
0 1 5 :  3
0 2 3 :  24
0 2 4 :  8
0 2 5 :  0
0 3 4 :  5
0 3 5 :  0
0 4 5 :  0
1 2 3 :  22
1 2 4 :  8
1 2 5 :  1
1 3 4 :  6
1 3 5 :  0
1 4 5 :  0
2 3 4 :  4
2 3 5 :  0
2 4 5 :  0
3 4 5 :  0
>>> 


2 件のコメント :

  1. はじめまして。
    3、4年前から時々読ませていただいています。鶴川在住でベーグル好きのランナー&自転車乗りです。
    ワッカベーグルの閉店残念ですね!
    今日行ってみようと思います。
    Twitter によると28、29も臨時で開けるようですよ。

    返信削除
    返信
    1. gwbsさん、コメントありがとうございます。ワッカベーグル閉店は大ショックでした。ぜひぜひ今日行ってきてください。私は今日行けませんでしたが4/29なら行けるかな? しばらくベーグル難民になりそうです。

      削除

Related Posts Plugin for WordPress, Blogger...