事例236
感染者数をシミュレーションした実践事例
東京都立小平高校 小松一智先生
今年の1月に、読売新聞の「教育ルネッサンス」で「情報Ⅰ開始目前」という特集が組まれました(※1)。今回は、ここで取り上げていただいた私の実践事例についてお話しします。
※1 https://www.yomiuri.co.jp/kyoiku/kyoiku/renaissance/
[上記は会員制サイトです]
「モデル化とシミュレーション」を生徒にとって身近で興味の持てる題材で
現在、私は都立小平高校におりますが、実践したのは、前任校の都立石神井高校です。
石神井高校の授業は1単位50分で、1日6時間、さらに土曜授業を年に18回行っています。
1学年は7クラスで、1年次に必履修として「情報の科学」を2単位、1時間ずつ週2回行っていました。
「モデル化とシミュレーション」は、教科書の後半に出てくるので、3学期に扱う学校が多いと思います。私も同様でした。題材はいろいろなものが考えられますが、生徒にとって分かりやすく、興味を持って取り組めるようなものにしたい。手元の教科書の例にあるような、「ラーメン店の利益を考える」「最大の売り上げを考える」などよりも、もっと身近で面白く取り組めるものはないかと考えていました。
新型コロナの感染者数シミュレーションを表計算ソフトでやってみる
着想したのが2021年の1月、新型コロナウイルス感染の2度目の緊急事態宣言が発令された時期でした。
直前の1月5日には、NHKのニュースで感染者数のシミュレーションや、感染者を十分に減少させるにはどのような行動を取らなければならないか、といった話題が取り上げられていました。そこで、この件ならば生徒たちも興味を持って取り組んでくれるのではないか、と考えたのがきっかけになります。
計算が大変だと、生徒には少し難しくなることが懸念されましたが、鳥取大学のサイト(※2)に、簡単に計算できる新型コロナの実効再生産指数の提案があったので、これが採用できると思いました。
※2 https://www.tottori-u.ac.jp/item/18052.htm
NHKのニュースでは、現在の状況が続けば感染者が増加し、ある程度対策をすると横ばいになり、しっかり対策をすると減少するというシミュレーション結果が、数理モデルを使って分析されていました。NHKのサイトもニュース動画のサイト(※3)載せておきます。
まさしく「モデル化とシミュレーション」の実例として最適ですので、これを採用しようと決め、表計算ソフトで始めたのが、この実践のスタートです。
※3 https://www3.nhk.or.jp/news/html/20210105/k10012798521000.html
こちらが、実際に授業で使ったスライドの一部です。今回のモデル化の目的は、「感染者数の推移を予想する」ということとしました。
数式や図で表すにあたっては、鳥取大学の実効再生産指数を活用しました。授業では、上記の鳥取大学のホームページに掲載されているプレスリリースのPDF(※4)にあるモデルの計算式を生徒に見せながら、計算結果やシミュレーション結果を実際に確認していくという内容を考えました。
※4 https://www.tottori-u.ac.jp/secure/17752/1125.pdf
実効再生産指数から将来の新規感染者数を予測する~2段階に分けて丁寧に
実効再生産指数は、非常に単純な計算式になっています。それぞれの式の意味は、次の通りです。
Rw8(i)は、日付 i日の実効再生産指数を表します。
Nobs(i)は、日付 i日の新規感染者を表します。
i日の8日後であれば、Nobs(i+8)とします。
<Nobs(i+3)>は、i+3日を中心とした、新規感染者数の1週間の平均を表します。
これらをもとに、Nobs(i+8)(→日付i日の新規感染者)を、<Nobs(i+3)>(→i+3日を中心とした新規感染者数の1週間の平均)を割れば実効再生産指数が求められる、というのが鳥取大学の計算式の方法です。
私たちには非常にわかりやすい表記ですが、生徒たちには難しいので、丁寧な説明が必要です。
さらに、生徒たちには、この式を変形して下段の式にすれば、<Nobs(i+8)>、何と8日後の新規感染者数を予測することができるということを示します。2段階でシミュレーションさせた形になります。
これが最初に行った表計算ソフトでの実践です。あらかじめ発表されている新規感染者数を入力します。
<Nobs(i+3)>で週平均の感染者数を求め、オートフィルと計算を使いながらRw8(i)実効再生産指数を求めると、感染者数がどのように変動するのかが見えてきます。
こうやって見ていくと、当時は「新規感染者が1000人を超えたから緊急事態宣言をどうする」という状態でした。今はそんなレベルをはるかに超えているのに、というところは懐かしいなという感じになりますが。
※クリックすると拡大します。
次に、未来の新規感染者数を減らすためにはどうすればよいかを考えます。
感染者数が増えつつある状況だったため、実効再生産指数を1.1とした場合、どのような増え方になっていくか。そして、2月末に感染者が500人を下回って、緊急事態宣言を解除できるようになるには、実効再生産指数がどうなれば新規感染者数が下回ってくるか。このパラメータを自分で変えてシミュレーションしてみよう、という授業を行いました。
私の授業では、毎時間授業の振り返りを取っていますが、生徒の反応としては、「すごいと思った」「数式を見た時には難しそうだと思ったけど、パラメータを使うことで簡単に新規感染者数を予測できて楽しかった」「どんなふうに実効再生産指数を下げれば、感染者が減っていくのかを考えることができた」など、身近なテーマを自分ごととして捉えて考えてくれたことがわかりました。これが一昨年の話です。
※クリックすると拡大します。
同じ内容をPythonで実施してみると…
昨年は、これをPythonで実践しました。
これは、次の年、つまり2022年度から「情報Ⅰ」が始まることを見据えて考えた内容です。2021年11月には、大学入試センターから皆さんもご存知の「サンプル問題」が公表されて、プログラムの分野に関する例題として「各政党に配分する議席数」などが出ており、ここではPythonに似た言語が使われていました。
このような内容を理解するためのシミュレーションを実践したいと考え、前の年に表計算ソフトで行った内容をPythonで実践しました。生徒に理解させたいのは、「配列」「繰り返し」「判断分岐」などです。
※クリックすると拡大します。
実際の2学期の授業の進め方がこちらです。micro:bitを使って導入を行い、その後Pythonの簡単な使い方として、判断分岐や繰り返し、入力、乱数の使い方、グラフの書き方などを行いました。また、「情報Ⅰ」では外部のAPIを活用するというものがあるので、WebAPIを活用することを扱いつつ、表計算ソフトを使った異なるシミュレーションも行いました。その上で先ほどの感染者数のシミュレーションをPythonで行った、という流れです。
こちらが生徒に見せた授業スライドです。先ほどの表計算ソフトで行ったものを、プログラムふうに書いてるというもので、内容は同じです。上段が実効再生産指数を求める計算式、新規感染者数を予測する計算式は、これを変形したものです。
生徒にはプログラムを一から考えるのではなく、ある程度できたものを与えて、空いているところを埋めることができればよいとして授業を進めました。
授業の中では、生徒にこのようなフローチャートを示して、どのような流れのプログラムのどの部分にあたるのかを意識させます。さらに、ポイントとなる矢印の部分についてしっかり考えてみようと促しながら、プログラム操作をさせます。
※クリックすると拡大します。
生徒に渡したソースがこちらです。
※クリックすると拡大します。
解答例です。これはあくまで解答例で、平均を求める関数を使ってもよいのですが、ここでは配列(Pythonではリスト)を使って足し算をして、それを7で割って平均を出し、「平均」というリストに追加していきます。
その平均を使って新規感染者数を割り、実効再生産指数をリストに追加しています。
※クリックすると拡大します。
次に、60日後までの感染者数をシミュレーションします。
先ほどと同様に操作の流れのフローチャートを提示した上でソースを渡し、矢印の部分を考える、という流れです。
パラメータを変えることで、作ったグラフの形が一体どう変わっていくかを実際に確認しながら、最初にNHKのニュースで見たものと何がどのように違い、それに近づけるにはどうすればよいのかを考えます。
このようにして、パラメータを変えることで簡単なシミュレーションができる、というところを理解させることをしました。
※クリックすると拡大します。
※クリックすると拡大します。
※クリックすると拡大します。
生徒の反応は、「表計算ソフトよりPythonの方が難しい」と言うが…
こちらでも毎時間、振り返りを書いてもらいました。
毎時間の振り返りは、理解度を「1」が「よく理解できた」、「5」が「分からなかった」の5段階で書いてもらいました。また、授業満足度を5点満点で取りました。
この2年間を比較してみると、表計算ソフトを使った2020年度と、Pythonを使った2021年度とで違いが出ているのがわかります。
数字が大きいほど「わからない」ということなので、評価としては、理解度も満足度も下がってしまったのが残念でした。
先ほどお話ししたように、一通りのPythonのプログラミングの部分が終わったあとに、表計算ソフトを使ったシミュレーションをやり、それをPythonでもできるよ、さらに感染者数をシミュレーションしたらどうなるんだろうか、という流れになったので、途中に表計算ソフトを入れたために、理解が今一つになったかもしれません。
また、配列を扱った時に、「配列はいろいろな値を扱える」ということを示してはいたものの、また、具体的に「何番目にどの値が入る」ということを意識できる内容を扱わなかったことも、もう一つの反省点です。
わからない人には本当にわからないようで、今までの授業で一番難しい内容だった人もいたようですが、一方で、しっかり分かっている生徒もいましたし、「全くわからない」と言った人の中にも、答えを見たら単純だったのでわかったと、それなりの評価をしている人も多くいました。
理解度が下がったのには、他にもいろいろな要因があったかと思いますが、内容としては非常に面白いため、しっかり理解させることができるよう、さらに工夫した授業を作っていきたいと思っています。
[参考サイト] https://pictogram2.com/
[質疑応答]
Q1. 2020年度はじめに比べると、22年度はコロナ感染者数というテーマは日常化しすぎた感じがしますが、いかがでしょうか。
A1.小松先生
今年度のシミュレーションの授業は2学期以降に行う予定なので、何を扱うかは今悩んでいるところですが、今年も感染者数を扱うと思います。
日常化していたとしても、実際、今第7波が来ていますが、それが今後どのように変化するか、といったところを考えさせるというのは意味があると思います。
また、今回コロナを扱っていますが、これがインフルエンザでも構わないわけです。感染症が拡大するのかしないのか、感染対策にはどうすればよいのかというところで、スケール感や、世の中に出てくるものがどのようにシミュレーションされているのか、という裏側を理解させるという意味では大事なことではないかと思います。
Q2.回帰分析の概念には、どの程度踏み込んでいらっしゃいますか。
A2.小松先生
回帰分析への概念は入れていません。これをやり始めると、多分間が足りなくなってくると思います。今回は、あくまで全員にそれなりのことを理解させるための部分だと思っているので、さらっと流すようにしています。
Q3.こういったシミュレーションの授業における生徒の成果物や取り組みは、どのように評価されているのでしょうか。
A3.小松先生
今回見ていただいた事例では、2つの課題を出しています。
まず、1つ目はシミュレーションの内容がクリアできたかどうか。
2つ目は、こちらの思うような内容で書き込めているか、というところです。全くできていないところでは、机間指導で少しずつヒントを与えて、お手上げにはならないようにサポートしています。
さすがに、全て想定した解答例で解答してくることはないので、難易度をどうするかは、今後、課題になるかと思います。
Q4.今回の実践は、共通テストのプログラミングの問題に近いと思います。生徒に選択肢を提示してやれば、もっと理解は進むと思うのですが、やはり全部入力させたいとお考えでしょうか。その辺りを教えてください。
A4.小松先生
選択肢ではなく、直接入力させたいですね。ただ、私がやったのは、全てを入力させるのではなく、「7日間の合計を出すにはどうすればよいか」ということを考えさせるのと、「配列への値の追加はどのように行うのか」ということを前の時間に行っているので、それを思い出してやってみよう、というのが今回のテーマです。ですので、ある程度、コードの意味を考えながら入力させて、理解させるというところまで持っていきたいというのが、私の個人的な思いです。
第15回全国高等学校情報教育研究会全国大会(オンライン大会) 分科会発表より