Skip to content
This repository has been archived by the owner on Apr 12, 2023. It is now read-only.

遠距離の信号を接触判定および表示から除外することを検討する #1121

Open
kvaluation opened this issue Aug 22, 2022 · 10 comments
Assignees
Labels
enhancement 新しい機能や改善のリクエスト waiting-for-confirmation 関係者に確認中のもの

Comments

@kvaluation
Copy link
Contributor

要約 / Summary

EN2では、平均70dBを超える遠距離のExposureWindowの要素の接触時間が大量に含まれ、接触判定に際してこれらを除外していないため、

  1. COCOAで表示する接触時間が長くなりすぎ、
  2. COCOAの接触通知をするか否かの判定に悪影響をもたらしている。

不具合の内容 / Describe the bug

cocoa201

元データ(ダウンロードしてご利用いただけます)
https://docs.google.com/spreadsheets/d/1r52qEUSHiq95ZTOeN1i_L7CcqmvSc4uT5lChDoz0K90/edit?usp=sharing

解析は、ExposureWindowsのデータを、接触日(Window)の区分を無くして二次元にし、ScanInstancesのTypicalAttenuationDbの小さい順に並べ替えて条件等と照らし合わせる手法により行いました。

ExposureWindowsに含まれる5分以内程度で TypicalAttenuationDb が付されたデータやその接触時間(SecondsSinceLastScan)を、ここでは「要素」といいます。1つのWindowは1以上の要素を持ちます。

  1. COCOA 2.0.1で表示される接触時間に、TypicalAttenuationDbの値が70dB(2〜3m)を超える接触の接触時間が含まれている。
    70dB(2m〜3m)を超えた接触時間の占める割合が、90%を超えているケースが21件中9件あり、次の2の問題がないケース(05A, 10G, 11G, 12G, 16A)でも、90%越えがある。

  2. COCOA 1.4 の条件(63dB未満の接触を15分以上)を満たさないが、COCOA 2.0.1で接触通知されているケースが約半数あった(21件中10件)。大きく次の2パターンある。

2.1 attenuation_bucket_weightsが0.01の要素を237分や701分間含むことで、ScoreSumが1350を超えた(06A, 13G)。

2.2 TypicalAttenuationDbが66dBや70dBを超える要素の接触時間が加算されることで接触通知の条件である15分を超えた(08G, 09A, 14A, 15A, 17A, 18A, 20A, 21G)。

上記の不具合について、1つを解決して他が悪化することは望まれないため、全体の一体的な解決が求められる。

表中、L列の記号は、ExposureWindowsを解析して、1m以内15分以上という現行の基準との関係で、接触通知をすべきであったか否かの私見による評価です。

◎: COCOA 1.4でも接触通知されており問題無い。
○: COCOA 1.4では接触通知されないが、接触通知することに違和感はない。
△: 接触通知すべきかどうか、何らかの価値判断が示されると良い。例えば、1m以内のケースを99.99% 程度の確率で拾うために、1mより遠い距離のみの接触についても通知をすべきである、という立場であれば、現行の基準との関係でも是認できる範囲と思われる。
x: 1m以内15分以上という現行の基準との関係で、接触通知されることに強い違和感がある。

再現手順 / Steps to reproduce

COCOA 2.0.1が通知する接触時間が長いという不信感は、例えばTwitterで「COCOA バグ」等の検索をすると多数観測できる。
(複数人との接触が加算されることをご存じのかたも、ご存じでない方もおられる)

解析手順の詳細は、リンク先。
https://docs.google.com/spreadsheets/d/1r52qEUSHiq95ZTOeN1i_L7CcqmvSc4uT5lChDoz0K90/edit#gid=1271544166&range=A2

本件の解析の前処理について。

  1. COCOA 2.0.1の画面で表示される接触時間と、本件解析で「累計_接触時間[分]>15」の合計時間が一致したことを全ケースで確認した。
  2. 四捨五入_累計_減衰ウエイト調整後[分]等の合計がDaily_summariesの WeightedDurationSum = ScoreSum と一致する(Android)か、近い値となる(iPhone)ことを確認した。iPhoneのScoreSumは、四捨五入される前の原データが合計された値を四捨五入している可能性があり、四捨五入された要素の値の合計となる本解析の値とは異なると想定している。

期待される挙動 / Expected behavior

1m以内で15分以上という条件から逸脱しない接触通知の判定をし、かつ、接触時間の表示を、この条件との関係で想定される表示とする。

スクリーンショット / Screenshots

なし(COCOAの接触通知の詳細画面は、個人を特定できる情報も含まれるため一般公開はしない方針です。公式の方は非公開前提に個別にご相談ください。)

動作環境 / Environments

・COCOA 2.0.1で接触通知されたケース
・iPhone、Androidの両方

その他 / Additional context

解決策

1. attenuation_bucket_weightsの0.01としている値を、0とする。
0としても、06A, 13Gの2件が接触通知なしになる他、他のケースには影響しない。

  1. 接触通知のAND条件の1つである15分以上の判定をする要素から、**一定のdBを超える要素の時間を切り捨てて加算しない。**COCOAで通知する接触時間も加算しない値を表示すると良い。

 案2A COCOA 1.4と同じ63dB越えを除く→21件中、11件が接触通知となる。
 案2B 65dB越え(weightが0.01の要素)を除く→21件中、13件が接触通知となる。
 案2C 70dB越えを除く→21件中、17件が接触通知となる。

  1. 表示する接触時間に遠距離での接触が含まれていることについて、2と分離して対応する方策と、2への対応として切り捨てた時間を加算しない方策がある。
    一貫性という点では、2での対応で一体的に表示時間を1m以内の可能性がある時間のみにすることが望ましい。

別の解決策

■ 別案1 現状のCOCOAの判定条件を正しいとして、1m以内で15分以上という条件の方を変更し、1m以内が10分以上で、遠距離を含む接触時間が15分以上とする。
(現状、1350スコアを超える接触時間が11分以内である件数は21件中16件と多数)

■ 別案2 ウエイトを掛けず、ScoreSumが実時間となるようにし、電波強度dBのしきい値のみで判断できるようにする。
 上記案2Bと等しい条件にするには、
 attenuation_bucket_weights を [1.0, 1.0, 1.0, 0]とし、
 

DailySummary_DaySummary_ScoreSum の valueを 900 とする。

65dB以外の値をしきい値とするには、
attenuation_bucket_threshold_dbの65を63や70にする。

(参考)
tmurakami さん
#754 (comment)

■ 別案3 ウエイトとスコアのしきい値を調整して、平均的に15分間となるようにし、スコアのみで接触通知を判定する。接触時間とする表示時間は別途検討する。しかし、この別案3は、トレードオフが多く不安定で別の不具合を生じさせてしまう可能性もあり、平均的に15分間となったかの検証も難しく、選択の優先順位は低いと考えられる。

@kvaluation
Copy link
Contributor Author

Webミーティングで説明して欲しい、というご要望があれば応じます。あるエンジニアの方とのWebミーティングでは、20分程度の対話で核心部分を掴んでいただけました。

一方、文章で説明していくのは、なかなか大変そうです。

この場をお借りして、exposure_data.jsonをご提供いただいた方々に、お礼申し上げます。

@daisuke-nogami
Copy link
Collaborator

daisuke-nogami commented Aug 22, 2022

具体的なexposure_data.jsonの内容を含めたデータ提供と整理ありがとうございます。

ご指摘の内容は、リリース前に検討していた論点でも概ねカバーされておりますので、
いただいたドキュメントで指摘したい事項と内容は理解できます。
ただし、回答が「口頭で分かる」では望ましくないと考えますので、
回答には少々お時間を頂けますでしょうか。

なお、 *見直しをする場合には、*頂いている案の中では、別案1の適切な条件を考える、というのが、
私のイメージに近いことも申し添えておきます。
よろしくお願いいたします。

※08/22 20:30 **で囲んだ部分加筆

@keiji
Copy link
Collaborator

keiji commented Aug 22, 2022

これIssueのタイトルで課題の内容を掴みやすくするために「遠距離の信号を接触判定から除外する検討」にするのが良いか思いますが、いかがでしょうか。

@kvaluation
Copy link
Contributor Author

これIssueのタイトルで課題の内容を掴みやすくするために「遠距離の信号を接触判定から除外する検討」にするのが良いか思いますがいかがでしょうか。

ありがとうございます。

@keiji さんにご一任します。

接触判定は条件通り上手くいっているが、表示している接触時間の90%が遠距離の接触時間になっている(05A, 10G, 11G, 12G, 16A)、という課題も同時に生じていますので、「接触判定及び表示」だとより伝わりやすいかもと感じました。

@keiji keiji changed the title attenuation_bucket_weightsの値と、15分を超えたか否かを判定するための接触時間にカウントできるTypicalAttenuationDbの値について 遠距離の信号を接触判定および表示から除外することを検討する Aug 22, 2022
@keiji keiji added enhancement 新しい機能や改善のリクエスト waiting-for-confirmation 関係者に確認中のもの labels Aug 22, 2022
@keiji
Copy link
Collaborator

keiji commented Sep 13, 2022

機能停止方針( #1132 )が公表されましたが、本件に関してはきちんと進めていきたいので、引き続きよろしくお願いします!

@daisuke-nogami
Copy link
Collaborator

こちら、なにも進捗の報告をいれておらずすいません。

こちらの議論を進めるためには、パラメータ設計のために収集した測定データの公開が必要だと思っているのですが、これを公開できる状態に整える時間が取れていないという状態です。

  • 計算したExcelが2個に分かれている & リリース後にも追加で測定をしたもらったデータもある
  • グラフや関数を入れているExcelでは、測定をしてくださった事業者さんの担当者名などの余分な情報があったり、列が揃っていなかったりする

すいません。が、必ずやります…

ちなみに、この議論の間に、他国のENアプリで設定がどうなっているかを軽く調べていたことも記録しておきます。

ドイツのENアプリの設定値でも、同じ様な1番近いAttenuationのWeightを減らす設計にしていました。
https://github.com/corona-warn-app/cwa-server/blob/main/services/distribution/src/[…]/resources/main-config/v2/risk-calculation-parameters-1.15.yaml

最初は、55, 63, 73を閾値とする、私が作業したのと同じ様な理論値に近いスコアにしていましたが、
corona-warn-app/cwa-server#1231

途中から、閾値を63, 73, 79に、重み付けも変えていて、弱い電波もスコアにカウントするようにしていました。
https://github.com/corona-warn-app/cwa-server/pull/1262/files

ただ、いずれのpull-requestも、根拠となるデータや説明が書かれておらず。

確かドイツは1.5mか2.0mを基準としていたのでそのまま利用できるスコアではないですが、
このスコアを入れるとどうなるのか、というのも説明できなければ、というのが、
上で「データを整理しなければ」と思った理由になります。

@daisuke-nogami
Copy link
Collaborator

daisuke-nogami commented Mar 13, 2023

4ヶ月半お待たせして申し訳ありませんでした。
こちらに、パラメータ設計のために収集した測定データ+2022年7,8月に追加で測定してもらったデータの生データと、それを元にパラメータを評価したときの計算を行うシートを作ってアップロードしました。
データの仕様などもExcel内に記載しました。

20230313_COCOA_データ収集結果.xlsx

こちらの測定結果をご覧頂くと、少なくとも「dBだけで1mを判定するのが難しい」ことは確認いただけるのかなと思います(2mは何とかなりそうだ、というところも含めて)

@keiji
Copy link
Collaborator

keiji commented Mar 15, 2023

パラメーター設計の根拠についてはぼくも理解した上で、個人的な感想としては、パラメーターについては状況に応じて、もっとリアクティブにアップデートしたかったな。という反省があります。

ソフトウェア的にはすべてのパラメーター(ENAPIの設定と、接触として表示する閾値)は配信ファイルを通じて更新可能に設計してありますが、結局この仕組み、一度も使わなかったんですよね。

どうにも行政は「今現在の設定を変えること」を「以前の設定が間違いだった」と理解するようです。
「状況の変化を捉えて、もっと良いパラメーターを探っていく」が普通になるのが個人的な理想です。

もちろん、パラメーターの変更には十分な根拠が必要というのは間違いないので、やはり「ユーザーの明確な同意に基づく接触情報の収集」機能なくして成り立たなかったとは思うのですが。

@daisuke-nogami
Copy link
Collaborator

COCOAが出す通知がどの程度強いメッセージだったのか、というのもパラメータ更新頻度には関係してきますね。

法令等に基づく、強い要請の根拠とするならば、アップデートをするにしても「いつ時点の基準にどのように該当したかを全て説明でき」ないと困るだろう、というのは、行政もそうだし、医療関係者もそう受けとるだろうとは思います。

一方、総括等を振り返っても、COCOAはそこまで強いメッセージを出すものではなく、「注意喚起」に止まるものでしたから、もう少し更新があっても良かっただろうとは思いますし、これはCOCOAに限らず、感染研の「積極的疫学調査実施要領」も含めた課題だったと思います(行政が判断するための基準として直接参照されたが故に更新しにくなった感じはあったので)。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement 新しい機能や改善のリクエスト waiting-for-confirmation 関係者に確認中のもの
Projects
None yet
Development

No branches or pull requests

3 participants