東京都の4月のCOVID-19感染者数を雑に予測する

はじめに

 予めお断りしておきますが、私は理系出身者ではありますが、数学や数理モデルまたはシミュレーションの専門家ではありませんし、感染症はじめとする医療分野の人間でもありません。出てきた数字の妥当性を担保するものではありませんし、できません。
 なるべく家に閉じこもりながら、今後の推移を気にしながら事態を見守っている人が多いのではないかと思いますが、閉じこもってやることが無いなら自分でもある程度は予測できるよ。という、方法の一例を提示するものです。
 本投稿では東京都のデータを利用しますが、お住いの自治体発表のデータを用いて、各自で予測してみてはいかがでしょうか。
 

指数関数的

 専門家や有識者とされる方々の発言などで「患者数が指数関数的に増加している」といった趣旨の見解をよく目にします。
 故に、指数関数で近似式を作れば、この先の動向がある程度は予測できるはずです。

 もちろん、単なる指数関数で近似するだけでは、自粛要請に呼応した人々の活動が制限されること(による感染者数低減効果)などの影響は含まれませんので、予測結果は過大な数値として現れるでしょう。逆に、(検査数が少なかったことなどにより)無自覚の感染者からの二次感染が拡大したり、スーパースプレッダーと呼ばれるような感染者が多く現れれば過小値となるでしょうから、指数関数で近似しただけで得られる予測値は単なる参考値でしかありません。
 こういった要因も加味して予測するには数理モデルを使ってシミュレーションする必要がありますが、普通の一般個人には相当ハードルが高いですし、そのモデルの妥当性もまた検討されなければいけません。

 単に指数関数で近似するだけなら、精度はともかく手軽にできます。ので、やり方を紹介します。
 

データを準備する

 本投稿では、元データとして東京都福祉保健局がCC-BY4.0で公開している以下のCSV形式のオープンデータを利用します。本投稿記載日前日(4/4)までの実績値を利用しています。
東京都 新型コロナウイルス陽性患者発表詳細 - データセット - 東京都オープンデータカタログサイト
※お住いの自治体によっては、自治体ホームページなどで公開されているデータをコピペするなどしてデータを集める必要があるかもしれません。

日毎に集計する

 上記の東京都のデータでは、患者毎のデータ行となっています。指数関数で近似式を立てて日別の新規患者数を予測するのに必要なのは、日別の新規患者数ですので、予め日毎の新規患者数に集計する必要があります。
 EXCELなどの表計算ツールでデータを集計してもいいですし、SQLで日毎にgroup byしてcountしても構いません。ご自身のITスキルに合わせて実施してください。
 以下のような形式のデータを用意します。

患者数
2020/03/22 2
2020/03/23 16
2020/03/24 17
2020/03/25 41
2020/03/26 47
2020/03/27 40
2020/03/28 63
2020/03/29 68
2020/03/30 13
2020/03/31 78
2020/04/01 66
2020/04/02 97
2020/04/03 89
2020/04/04 118

※指数関数は増え(または減り)続けますので、患者数が概ね増加し続け始めたと思われる日を開始日として、それ以前の少数の患者数が微増微減している期間やパラパラと離散的に発生している状況は指数関数的ではないので切り捨ててください。いつを開始日とするかによって近似式(及び予測結果)は変わります。
 

前後2日の平均を算出する(オプショナル)

 休日前後などで新規患者数の増減が乱れます。保健所が休日はやっていない(?)だとかいろいろな要因があるようですが、検査依頼日と発表日には数日の誤差が含まれることもあるでしょうから、土日を想定して前後2日の平均値を採れば、各日毎の乱れは概ね除去できるのではないかと考えました。
 故に、新規患者数の生データ以外に、前後2日を平均した値も用意しておくことにします。すると、先のデータは以下のようになります。

患者数 前後2日を含めた平均患者数
2020/03/22 2 10.6
2020/03/23 16 16.6
2020/03/24 17 24.6
2020/03/25 41 32.2
2020/03/26 47 41.6
2020/03/27 40 51.8
2020/03/28 63 46.2
2020/03/29 68 52.4
2020/03/30 13 57.6
2020/03/31 78 64.4
2020/04/01 66 68.6
2020/04/02 97 89.6
2020/04/03 89 92.5
2020/04/04 118 101.3

f:id:kachine:20200405183619p:plain
 前後2日平均の方が一連の傾向をよく表していそうな感じのグラフにはなりました(それが正しいかどうかは判りませんが)。
 

近似式を求める

 愚直に近似式を求めるのは簡単ではありません。ツールを使いましょう。
 理系学生には有名かもしれませんが、Wolfram社のMathematicaという強力な数式処理システムがあります。買うともの凄くお高いのですが、その機能の一部はWolfram AlphaとしてWeb経由で無料で利用可能になっています。
Wolfram|Alpha: Computational Intelligence

 検索エンジンのような見た目をしていますが、「計算したいことや知りたいことを入力してください」の入力欄に以下のように入力してください。

指数フィット 2, 16, 17, 41, 47, 40, 63, 68, 13, 78, 66, 97, 89, 118

 「指数フィット」の後の数列は上表の日毎の患者数です(カンマ区切りではなくスペース区切りでも大丈夫なようです)。
 ですので、先述の「前後2日を含めた平均患者数」の近似式を得る場合は、以下のように入力します。

指数フィット 10.6, 16.6, 24.6, 32.2, 41.6, 51.8, 46.2, 52.4, 57.6, 64.4, 68.6, 89.6, 74.0, 60.8

 入力後、右端の=ボタンを押すかエンターキーを入力すると、この数列をよく表す近似式が「最小二乗の最良適合」に表示されます。本例の場合は、17.0336e^{0.135102x}が近似式になります。また、この近似式がどれだけ元の数列をよく表せているかを示す値が「フィットの診断」に表示されています。例えば、R^2は1に近いほど元の数列を正確に表現していることを示しています。

f:id:kachine:20200405180825p:plain
Wolfram Alpha指数フィット結果スクリーンショット
 

未来予測

 近似式が得られたので未来予測ができます。
 本例の場合は、近似式は17.0336e^{0.135102x}でした。ここで、xに入れる値は何日目かを表す整数です。
 本例では、2020/03/22を開始日として数列を与えていますから、3/22がX=1となり、初の未来日となる4/5はX=15となります。
 エクセルで表現するなら「=17.0336*exp(0.135102*Xを表すセル名)」といった式で、未来予測ができます。
 近似式から4/15までを算出すると、下表のようになります。

DAY 患者数 前後2日を含めた平均患者数 推定患者数(R^2=0.931407) 前後2日を含めた推定平均患者数(R^2=0.986559)
1 2020/03/22 2 10.6 19.5 20.7
2 2020/03/23 16 16.6 22.3 23.6
3 2020/03/24 17 24.6 25.5 26.8
4 2020/03/25 41 32.2 29.2 30.5
5 2020/03/26 47 41.6 33.5 34.8
6 2020/03/27 40 51.8 38.3 39.6
7 2020/03/28 63 46.2 43.9 45.1
8 2020/03/29 68 52.4 50.2 51.3
9 2020/03/30 13 57.6 57.5 58.4
10 2020/03/31 78 64.4 65.8 66.5
11 2020/04/01 66 68.6 75.3 75.8
12 2020/04/02 97 89.6 86.2 86.3
13 2020/04/03 89 92.5 98.6 98.2
14 2020/04/04 118 101.3 112.9 111.8
15 2020/04/05 - - 129.2 127.3
16 2020/04/06 - - 147.9 145.0
17 2020/04/07 - - 169.3 165.1
18 2020/04/08 - - 193.8 188.0
19 2020/04/09 - - 221.9 214.0
20 2020/04/10 - - 254.0 243.7
21 2020/04/11 - - 290.7 277.4
22 2020/04/12 - - 332.8 315.9
23 2020/04/13 - - 380.9 359.7
24 2020/04/14 - - 436.0 409.5
25 2020/04/15 - - 499.1 466.3

 これをプロットすると、以下の通り。
f:id:kachine:20200405183925p:plain
 現状のままなら、近似式によれば4/15頃には500人に迫る患者数となってしまう可能性を示唆しています。

 参考までに、4月末までを算出しプロットすると、以下の通り。
f:id:kachine:20200405183958p:plain
 念のためですが、数字は累計ではありません。日毎の新規患者数です。

 この雑な予測を現実にしないために、各自ができる感染予防対策を行いましょう。
都内の最新感染動向 | 東京都 新型コロナウイルス感染症対策サイト
 

 これは個人的な見解ですが、医療やライフラインを支える業種の方々以外は、行政機関がこのまま生ぬるい対応しかしない/できないなら会社休んで、それで解雇されるなら失業保険や生活保護でもいいんじゃないですかという選択肢も考えた方がいいかもしれません。自分が死んだり、知らずに誰かを殺すことになるよりよほどましだと思うのです。
 



以上。