プロダクション明細の「平均レベル」は正確ではありません (+データ取得の話)

2020-11-17

Webポータルのプロダクション明細に表示されている平均レベルが、11/17 03:00現在、第53回PMF開始時点の値で更新されました。

↑プロダクションごとの明細ページにおける基礎情報に所属P平均Lv.が含まれています

このプロダクションごとの明細ページは普段それほど使われていない機能なのですが、いつもPMF発表直後から急に利用されるようになり、マッチング発表後に一気にアクセスされます。マッチング発表日のアクセス数だけで、2回前に開催されたイベントの全期間の総アクセス数を超えます。

移籍先のプロを見極めるデューデリジェンスや、マッチング相手の平均レベル調査などに使われているものと勝手に思料しています。

平均レベルは直近のイベントに参加したPだけで計算されている

プロダクションの平均レベルは、「直近のイベントに参加しているプロデューサーの平均値」を計算しています。現在で言えば、鋼鉄公演きらりんロボ(復刻)で1pt稼いだプロデューサーが対象です。

したがって、この平均レベルはほとんどの場合において不正確です。鋼鉄公演(復刻)には8,779プロダクションが参加しましたが、そのうち2名以上が所属するプロダクションにおいて全所属プロデューサーが鋼鉄公演(復刻)に参加したプロダクションは280であり、21名以上に限るとわずか2プロダクションです。

比較的アクティブなプロダクションであれば、割合としては相当数はイベントに参加していますので、一般的傾向としてこの平均レベルは大きく外れた値ではないだろうと思います。先の21名以上の条件でも、「6割の参加」とすれば130プロダクションにまで増加します。しかしいずれにせよ、不正確なことに変わりはありません。

↓ここから、この平均レベルの基となるデータ取得に関するクッソ細かい話が続きますので、特に興味のない方は読まなくて大丈夫です。

イベントに参加していないPは”無視”せざるを得ない

平均レベルが不正確なのは、ボーダーbotがイベント最終結果ページを起点としてプロデューサー情報の更新を行う仕様であり、イベントに参加していない(=1ptも稼いでいない)プロデューサーの情報は最新化されず、それゆえ当該プロデューサーが現在どのプロダクションに所属しているかが判らないことによります。

最新化されなければ、現時点の所属先が判らないので、平均値に含めることができません。

本来ならば、ボーダーbotが存在を認知しているプロデューサー総勢639,898人を、できる限り迅速にすべての情報を更新することが理想です。最新化されているPと古い情報で放置されているPが存在する……などというのはデータ的に気味が悪いので、こんな状態は本当は許容したくはありません。

しかしながら、ボーダーbotはあくまでもスクレイピングしているだけの存在でしかありません。全プロデューサーの情報を更新するとなると、通常業務であるイベントポイントの経過観測を停止しない限り、次イベントが終了しても全プロデューサー更新が終わらない状態になります。かつて存在したPPDB様はこの「イベントポイントの経過観測」をしていなかったことから、全プロデューサーの最終結果を取得できていたものと推測していますが、ボーダーbotにはその方法が許されません。

妥協として、イベントに参加しているプロデューサーは確実にアクティブですから、
 イベント最終結果に含まれているプロデューサー
 =イベント最終結果と合わせて(レベルなどを含めた)基本情報を更新するプロデューサー
としています。結果として上記のプロデューサー平均値の計算に含まれます。

inactiveなPは3ヶ月に1回のタイミングで更新される

永きに渡りイベントに参加していないinactiveなプロデューサーの情報も更新していないわけではありません。

これらプロデューサーの情報は、イベントポイントの観測作業がない空き時間に情報を更新しています。具体的にはイベント終了日の23:00~翌日12:00に作業しています。この時間に、最近更新されていないプロデューサー情報をできる限り更新しています。

もっとも、この13時間で全ユーザを更新することはできませんので、順次少しずつ更新しています。現在では、完全に引退したプロデューサーも、だいたい3ヶ月のうちには情報が更新しています。

これらイベントに参加していないプロデューサーは、たとえプロダクションに所属していたとしても、取得タイミングの差により、プロダクション明細ページの平均レベルには含まれることはありません。

そもそも平均レベルはイベント終了後いつ更新されるのか

平均レベルの更新、すなわちイベントの最終結果+イベントに参加したプロデューサー・プロダクション情報の更新は、1プロデューサーあたり約1.6秒かかります。イベント参加者27,000名+所属プロダクション8,500というここ最近の標準的な数で想定した場合、約17時間程度かかります。

イベント最終結果発表後、すぐにこの取得処理を開始したいところですが、この情報更新には「取得処理の最中に新規カードが追加されてはならない」というシステム上の制約があります。処理の開始時点には存在しなかった未知のカードをリーダーに設定しているプロデューサーがいると、新規カードなのかプロデューサーページの仕様変更なのか送られてきたデータが不正なのか判断できず、データ整合性が保てているかわからないので安全側に倒して処理が停止してしまうのです。

この場合、手作業でデータを補正してから再開させる仕様になっていますが、正直面倒ですし事故の原因にもなります(なりました)。

そのため、イベント最終結果発表後にガチャで新規SRが追加された後、Mobage上の「お知らせ」等を目で確認して、しばらくの間カードが追加されなさそうなことを確認してから、手動でジョブをキックしています。そのためスタートまで若干の時間がかかります。

↑イベントの最終結果+イベントに参加したプロデューサー・プロダクション情報更新中は、この文言がWebポータルの画面下部に表示されます

PMFの場合はガチャ更新がイベント最終結果発表と同じ12:00であり、取得中にカードが配布されるケースは(イベント中にライブが行われてでもいない限り)過去に例がありませんので、早ければ12:30くらいから情報更新をスタートしています。結果として、平均レベルは翌日未明には更新されます。

たまにデータ取得に時間を要することがある

すんなりとイベントの最終結果+イベントに参加したプロデューサー・プロダクション情報の取得がうまくいけばよいのですが、まだ問題があります。

イベントの最終結果をMobage側から受信する際、データに不整合がたまにあり、順位が低いプロデューサーやプロダクションの方が順位が高いものよりイベントポイントが多いというデータを観測することがあります。要は「22000位のPより22001位のPのptの方が多い」というデータを受領するケースがあります。

この場合、ボーダーbot側のキャッシュクリア後、読み取り対象のURLを変更して表示する順位を少しずつずらして再取得します。たとえば22001位~22005位で不正な値が取れた場合でも、21998位~22002位で順位ページを取得すると直ることがあります。

この「不正な値が取れた順位周辺を1位ずつちょっとずつずらして読み直して、一番多く取れたポイントを正とする」という特殊処理は、システム内部ではシフトリードバリデーションと呼んでいます。

このシフトリードバリデーションの件数が一定数以上に達した場合、Mobage側が抱えているキャッシュに問題があると判断して、取得済データを破棄して時間を置いてから全量の読み直しを自動的に選択することがあります。発生頻度としては5イベントに1回くらいですが、これが起きると、情報更新に2倍以上の時間がかかります。

結論

  • ボーダbotの平均レベルは前イベントに参加していないPを含まないので、ほぼすべてのプロにおいて不正確な値が出ます。これは参考値です。
  • しかも、イベント更新の翌日にならないと平均レベルは更新されません。場合によってはもっと長くかかります。
  • 複雑な処理を経ているので、たまに挙動がおかしいことがあります。もしなにか気づいた点があれば、すぐに教えて下さい。できれば再取得に要する時間を考慮して、早めに教えていただきたいのです…
    (たいていbot側は内部で発生したエラーなどを気にしていて、表面に出てきているような問題には気づいていません。気づいた点を教えていただけることはとてもありがたいです)