Personium Trails
PDSを使ったパンデミック拡大防止アプリ企画
Personium Project
in collaboration with
Code For Myself Project
2020年4月
企画概要
利用者が自身の 個人の移動履歴 を使って 、感染した人たちの匿名化された 移動履歴と対比してチェックをしてCovid-19 感染リスクレベルを見定めることができるようにする。
2
想定利用者: ちょっと不安な人々
3
こないだの月曜にちょっと気分転換のために散歩にでかけた。
ちょっと 罪悪感 もあるし、そのことをみんなに しられたくはない
そのころから体調が悪い.
感染してないと思うけど. .. だけど正直なところ, ...ちょっと自信がない.
とりあえず 黙っていようかな.
想定利用者: 感染者
4
Covid-19 陽性と診断された.
みんなに伝えて警告しなくてはいけないのは分かっている。
悪いことをしたわけではないが、
どれだけの人にうつしてしまったかを考えると負い目を感じる.
でも、それより何より 、それが私だったってことはやはり知られたくない。
だけど、いつどこにいたのか、正確には覚えていない。
代表画面イメージ
5
3月11日(水)
10:00 – 12:00 自宅
12:00 – 13:00 移動
13:00 – 17:00 富士通ソリューションスクウェア
17:00 – 18:00 居酒屋 呑太郎 蒲田店
! 感染者との接触可能性高
18:00 – 19:00 移動
3/11
17:00 – 18:00 居酒屋 呑太郎 蒲田店
3/14にCovid19 確定診断された方の行動履歴データ
16:30 – 17:30 居酒屋 呑太郎 蒲田店
感染者との接触があった可能性があります。
・Covid19 自覚症状チェックリスト
・PCR検査のご案内
・相談窓口
あなたの行動データ
Cell設計
6
Unit
個人
Cell
集約管理Cell
管理者
個人
Cell
Cell管理アプリ用
Box
・・・
・・・
感染者の
匿名化行動履歴
医療機関
Cell
医療機関
Cell
・・・
・・・
個人
自身の行動履歴データ
本システム外部から
オープンデータとして
感染者匿名行動履歴を取込
マッチング
自身の行動履歴データ
感染確定診断者は
潜伏期間中含めた行動履歴データを匿名化の上アップロード。
(自宅座標など個人特定につながる情報は排除)
自動記録されるGPS情報に加えて、フロアや部屋名など
詳細情報を追加入力
(医療機関などがヒヤリングして入力代行するのでないと 個人にはつらいと思われる。)
マッチング
感染リスクが見える
画面設計について
初版開発の方針
未感染の個人
感染の疑いのある個人
感染の確定診断を受けた個人
システム管理者
各国政府などをはじめとしたパンデミック予防をミッションとする組織
8
User Scenario : Individuals
9
User Scenario : Individuals
(例: 3/22日に熱海港から熱海駅行きバスに乗った。
バスが込み合っていて、大声で話している学生がいたが、
そこに感染者がいたかもしれない。)
その際にマスク有無や部屋名などGPS情報からは取得されていない情報を追加登録。
10
User Scenario : Individuals
(例: 3/27日 ○○病院での検査にてCovid19陽性
無症状なので推定となるが、3/23日に乗った熱海港から
熱海駅行きバスでのクラスター感染が疑われる。)
マスク有無や部屋名などGPS情報からは取得されていない情報を追加登録。
11
情報の信憑性の意味も含め、医師等しかるべき専門家が代理入力したり
内容の証明を行う必要があると思われる。
Transition 00: Intro & User PDS Creation
12
01_App Introduction
02_User Registration
&
PDS creation
10_App Top
Transition 10: Initial Settings
13
10_App Top
11_Google
Location History
Import
10_App Top
10_App Top:
- Show latest log in PDS to prompt users to import / input more recent logs.
- Urges user to import Google Location History
ロケーション履歴データの入力・インポートは、現状ユーザにとって一番面倒な作業
(API による自動Syncができず、Google Takeout でのマニュアル作業が多い。)
せめてZipファイルのPCからのドロップだけで登録できるようにしたい。
Transition 30: Daily Use Flow
14
10_App Top
31_My
Stay
Details
Date Change
36_My
Move
Details
launch
33_Others
Stay
Details
38_Others
Move
Details
(Infected People
in Covid 19 context )
Modify, Add Info
32_My
Stay Edit
37_My
Move Edit
Modify, Add Info
Transition 50: Trails Disclosure
15
10_App Top
31_My Stay
Details
36_My Move
Details
launch
Modify, Add Info
51_My
Subjective
Info Input
52_My
Non-disclosure
Locations selection
53_My Trails
Disclosure
Candidate list
50_Disclosure
Top
54_My Trails
Disclosure
Confirmation
Perform disclosure (*1) and
Back to 50_Disclosure top
*1 いたずらによる社会不安増長や、誤操作等によるプライバシー漏洩を防ぐため、Disclosure には医療機関や自治体等による審査プロセスを経るように設定できるようにする。
New disclosure
Transition 60: Disclosure Modification / Revocation
16
10_App Top
31_My Stay
Details
36_My Move
Details
launch
Modify, Add Info
61_My
Disclosure
Detail
53_My Trails
Disclosure
Candidate list
50_Disclosure
Top
(incl. list)
62_My Trails Disclosure Modification
Confirmation
Perform disclosure modification
(*1) and Back to 50_Disclosure top
modify
revoke
select
データ構造について
Google Location History Data
duration: 開始時刻ー終了時刻 (どちらも共通。unixtime)
placeVisitの場合 : location -> latitudeE7, longitudeE7�activitySegmentの場合: startLocation, endLocation -> latitudeE7, longitudeE7
それぞれ決めつけではなく、AIか何かで確率重みづけつきで、複数候補が出ている。(2016年ごろのデータだと、activitySegmentの確率はすべて0.0だが、2020年のデータだとしっかり確率が百分率で入っている)
18
Personiumに取り込むときのデータ構造案
年ごとのディレクトリ。月毎のファイル。
個別開示できるようオブジェクト単位で小分けにしたファイルも生成する。
�
19
Box構造
⇒100年生きても101エントリ
⇒ 13エントリ
・s_{滞在開始unix時間}.json
・m_{移動開始unix時間} .json
20
imported
2019
2019_JANUARY.json
2019_FEBRUARY.json
…
odata
2019
01
s_1577860874057.json
m_1577863715251.json
s_1577865156530.json
…
02
s_
…
2020
Box: app-trails
1ディレクトリあたりの子要素上限が1000程度であっても何とかなる構造。
OData構造
21
Prop Name | Desc | Sample |
__id | Uuid | |
startTime | Unix time | 1577860874057 |
endTime | Unix time | 1577863715251 |
latitudeE7 | 緯度 x 10^7 | 344765260 |
longitudeE7 | 経度 x 10^7 | 1355952250 |
name | Name of the Place | 瀧谷不動明王寺(瀧谷不動尊) |
placeId | GoogleのplaceId | ChIJU7Nq1_3VAGARofUKBlHEnSo |
Stay (PlaceVisited)
Move (ActivitySegment)
Prop Name | Desc | |
__id | Uuid | |
startTime | Unix time | |
endTime | Unix time | |
sLatitudeE7 | 緯度 x 10^7 | |
sLongitudeE7 | 経度 x 10^7 | |
eLatitudeE7 | 緯度 x 10^7 | |
eLongitudeE7 | 経度 x 10^7 | |
| | |
検索や一覧表示に用いない付加情報は、WebDAVファイルに書くようにする。
Google実装に依存しない命名
感染者情報Cellに保存するもの
マスク有無/しゃべっていたかどうか?
その時点での感染確率(いつ感染したかはわからない)
上記確率情報はどうしても不安定であるため、本アプリによるスクリーニングは、あくまで感染リスクの一次フィルタリングにしかならない。
その感染者の状況に関する自然言語でのメモ(専門家が記述)を付加し、アプリによるスクリーニングで感染者との近接がヒットした人にのみこれを表示。
そのメモ情報を読むことで、無用な心配・不安をあおらないようにする。
22
マッチングアルゴリズム案
placeIdでの完全一致 or (x のrange and yのrange)
感染者StartTime < 自分EndTime and 感染者EndTime > 自分StartTime - R
R = ウィルス残留時間 (1h – 3d)
タクシー⇒ 自動車の移動と認識されているので、自身でタクシーとしてマークしてもらう。
駅/停留所ごとのセグメントに分割し、車両番号情報などを付加
23
性能面での今後の拡張
24
ポイント
25
MyData vs Covid-19
COVID-19 App List
Shared URLs
Fevermap issues:
https://gitlab.com/fevermap/fevermap/-/issues/13
https://gitlab.com/fevermap/fevermap/-/issues/18
https://gitlab.com/fevermap/fevermap/-/issues/14
OURA: https://ouraring.com/ucsf-tempredict-study
Quantified flu: https://quantifiedflu.org/
企画概要
30