かえるのプログラミングブログ

プログラミングでつまずいたところとその解決策などを書いていきます。

9日目 "疫病制御の分散効果" 3

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 9日目の記事です。


9日目 本日は 34/49, 4章まで読みました。

本日読んだところでは、計画者に帰属する再分配パラメータ (コスト) を変えた時の高齢者、若者 (基本セクター)、若者 (贅沢セクター) にどれだけの福祉利益が与えられるかがシミュレーションしていました。

[経済緩和無し]

  • 基礎労働者の感染率は高級労働者よりもわずかに高い

[経済緩和]

  • 高齢者(職場で曝露されることがない)の感染率は、若年者よりも低い
  • 経済的緩和は、高級労働者(仕事から離れて家にいる労働者)の方が直接的な健康上のメリットが大きい
  • 職場でのウイルスの拡散が減れば、職場外での感染者が減るため、自宅や店舗、病院での新たな感染が減る

[政策コスト有り]

  • 経済のどの部分をどのくらいの期間停止させたいかという点で、個人のタイプによって大きな違いがある ・高齢者(人口の15%)は、高級部門の30%を停止し、一部停止を年末まで継続してほしい ・対照的に、若年層(全人口の50%近く)の高級品部門の労働者は、より低いレベルの緩和を希望しており、その緩和はもっと早く終了してほしい ・ベーシック・セクターの労働者は、これら 2 つの両極端のほぼ中間に位置する政策を好むが、実利主義政府も同様の政策を採用

[政策コスト無し]

  • 政策選好は質的には変わらないが、量的には大きく変化
  • 両セクターの若年労働者は、好ましい緩和政策に同意 ・消費の結果が同じであり、健康面では実質的に等しく恩恵を受ける
  • 再分配が(事実上)コストレスである場合には、より積極的な効用主義的緩和政策が選択される
  • 不均一性とコストのかかる再分配が相まって、パンデミック対策の手段としてシャットダウンを利用することの見返りが少なくなる

[まとめ] - 再分配のコストに関係なく、若い人たちの福祉の利益や損失ははるかに小さい - 再分配のコストが高い場合には、若い贅沢労働者の福祉利益は、若い基本的労働者よりも常に小さいが、再分配のコストがない場合には、ほぼ同じ - 高齢者にとっては福祉を最大化する政策が、若者、特に贅沢部門の労働者にとっては(緩和がない場合と比較して)福祉を低下させる可能性があるということである

感想

  • 3つのグループに分けられたエージェントは、各自の利益 (生存確率をあげることと消費によって得られる効用を損ねないこと) を最大限にするような緩和政策を選好する。
  • 高齢者はそもそもの疫病による死亡率が高いので、ロックダウン政策によって得られる利益は大きいが、それは若者と利益相反するものである。
  • この問題設定だと計画者は設定したパラメータによってどのグループを優遇しているみたいな議論になって大変そう。
  • 少し難しくなってきた。

8日目 "疫病制御の分散効果" 2

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 8日目の記事です。


8日目

本日は 10/49, 2章まで読みました。

今日読んだところでは、細かく仮定をおいて各事象を式に落とし込んでました。

この論文では、エージェントを若者と高齢者にわけ、さらに若者は ''基本的なセクター'' と ''贅沢セクター'' に分けた上で、さらにさらに健康状態によって 6つの状態に区別していました。

消費財であれば、必需品生産産業、贅沢品生産産業と訳せそうですが、この論文では医療従事業についても基本的なセクターと贅沢セクターとで分けており、財の種類ではなく、同じ業種に2つの種類があるということのようです。

こういった仮定のもと、賢明な閉鎖政策は、贅沢セクターかつ、人との接触が多いようなセクターを積極的に閉鎖することだと言えます。

緊急事態宣言時の際も、コンビニやスーパーは空いていたが、居酒屋は営業自粛するように行政指導があったみたいな感じですかね。

この論文は数式や図表が充実しており、かなり しんどい 読み応えがあります。

せっかくこのような日課を自分に課してるのでじっくり時間をかけてでも向き合っていく予定です。


どうもありがとうございました。

kaggle の notebook コンペで役に立ちそうなディレクトリ構成の話

こんばんは、kaaggle Advent Calendar 2020 の 17日目の記事です。


これは何

この記事では、MoA コンペで実際に私が使っていた事例を参考に kaggle の Code コンペティション (テーブルコンペ) におけるオフラインの実験 - kaggle notebook での推論 をシームレスに実行できるようなディレクトリ構成についてご紹介しようと思います。

目次

  • Code コンペティションについて

  • MoA コンペについて

  • 何が問題だったか

  • notebook がラクならパクればいいじゃん

  • まとめ

1 . Code コンペティションについて

Synchronous Code コンペティションとは Code コンペティションとは 2019 年の Instant Gratification コンペ (通称 kerneler君コンペ) から適用されたコンペ形態で、

  • Submit ボタンを押したタイミングで Private test set を使い ReRun される (そのデータで計算されたスコアが最終順位になる)

  • public test データが一部、または全く与えられず、ReRun 時に初めて public test データにアクセスできる (参加者からは見えない)

  • kaggle の notebook のセッション内で推論を行うコードを書く必要がある

  • notebook は CPU mode と GPU mode で実行上限時間が定められている

といった特徴があります。

そのため、画像コンペや NLPコンペのような、DeepLearning ベースで解くことが想定されるようなコンペティションにおいて、より良い精度を出そうと思うと、notebook 上で 学習 + 推論を行おうとすると、

  • 与えられた GPU メモリが足りないのでたくさんのエポック数を回せない

  • EfficientNet や BERT といったモデルを大きくできない (使用モデルが制限される)

などの不便が想定されます。そのため、参加者は学習と推論のコードを分けることが許可されており、多くの参加者は以下のような戦略を取っています

・kaggle notebook を学習用と推論用に分ける

  • この場合、GPU だと学習に最大 9h 使用できる

  • 学習済みのモデルはデータセットに upload する他、推論用 notebook の UI から KernelOutputFiles の tab から add することでアクセスできるようになる

・自宅の GPU サーバーや GCP で学習し、推論のみ notebook 環境で行う

  • この場合、資金の許す限り強いマシン、無限の時間を使用しモデルの育成を行うことができる

  • 学習済みモデルは kaggle datasets upload -p /path/to/model/weights などで Datasets に upload でき、推論用の notebook からは Datasets を add することでアクセスできるようになる

2 . MoA コンペについて

アドベントカレンダーでも紹介されているので詳細は省きますが、匿名特徴量のテーブルデータのコンペでかつ NN が有効なコンペでした。

public test は少し与えられており、コンペの焦点として、public test と private test が如何程似ているか、どれほど汎化性能を追求できるかが重要でした。(重要でないコンペはないと思いますが..)

そのため、私は制限上限の 2h いっぱい使って、特徴量加工、学習、推論を一気通貫で行いました。

特に、匿名で与えられた特徴量を RankGauss や PCA などを使って加工する特徴量エンジニアリングが主流であったため private test データも合わせて fit transform することで、ある程度事故を減らすことができたように思います。

しかし、1h 30min ほど使用していた私のベストモデルの伸びが鈍化してしまい、ダメ押しの推論のみのモデルもアンサンブルに含めようと方針転換したのでした。

3 . 何が問題だったか

推論のみのモデルを用意するにあたって、train + public test のみで fit した PCA モジュールなどを個別に保存して、推論時には transform するだけにする必要がありました。(fit_transform してしまうと private test 使用時に不整合が発生し、モデルの predict 時にエラーで落ちる --> Submission CSV Not Found になる) 結構ハマってしまった方も多かったようです。

これまで全部 notebook で実験を済ませていたこともあって、PCA を fit したモデルを dump したものは KernelOuputFiles から add すればよく楽チンだったのですが、

https://github.com/osuossu8/Kaggle_Bengali2019

画像や NLP で使用していた普段使いのディレクトリ構成を使用していた時は細々した手間が発生して面倒でした。具体的には、DeepLearning コンペだと pth だけ upload すれば良いことが多く、outputs というところに吐き出していた pth のみを uploads に cp して upload するという手抜き運用だったので、実験ごとにたくさんの中間出力ファイル (pkl に固めてました) が必要な本コンペには合わない構成でした。

4 . notebook がラクならパクればいいじゃん

Notebook の add がラク, 自分の Dir 構成が不便 ... ということで自分の実行環境でも kaggle の notebook の output みたいな形にすればええやんということで以下の Dir のような形に落ち着きました

https://github.com/osuossu8/KaggleMoA/tree/main/exp

exp dir 以下の exp00X の単位がそれぞれ新しい notebook を立ち上げることを擬似的に表しています。

ちょっとした工夫ですが、画像コンペで使う dir ではなんども使うスクリプトは .py に分割し、import するようにしているところを関数ベタがき上等のコピペ祭りを許容しています。

これにより、新しい notebook を推論用に立ち上げたときに notebook にコピペし、データセットを add するだけで回すことができました。

この構成のおかげでオフラインの実験が捗りました。使用感は notebook 環境さながら (当社比) でストレスなかったです。(コンペで結果残すのに繋がりませんでしたが ...)

同じく MoA コンペに参加されていた tawara さんも似たような結論に達されていたようです。

https://twitter.com/tawatawara/status/1335223646911021059?s=20

まとめ

  • "Notebook がラクならパクればいいじゃない" -- カエル・アントワネット (1994~)

以上です。ありがとうございました。


追記 ・twitter で指摘をいただき Code コンペとはのところを修正しました

7日目 "疫病制御の分散効果" 1

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 7日目の記事です。


7日目

新しい論文 を読みはじめました。

メモへのリンクは以下です。

github.com

本日は 5/49, 1章分まで読みました。ページ数の多い論文は日にちを分けて読んでいこうと思います。

この論文は先行研究では、"代表的なエージェント" を対象に、ロックダウン政策と経済活動とのトレードオフについて考えているが、実際に各エージェントが政策によって得られる利益とコストは、エージェントの属性に応じて異なっているので、そこを考慮してみた。といった内容です。

具体的には、ウイルス感染を遅らせることに対して、感染による重症化や死亡のリスクの高い高齢者ほどより得られる恩恵は大きく、経済活動が低下することによって受ける損失は、雇用が減ることによる負担が大きい若年層の方が大きいということです。

また、若年労働者についても彼らが従事する職業の種類によっても、異なることも考慮しています。

従って、エージェントを、基本的なセクターの若年労働者、贅沢なセクターの若年労働者、退職した高齢者の3つのタイプの人々を区別しており、政府はあるセクターを制限する代わりにその労働者を他のセクターに再配分する最適化問題を解いています。

ここまでの感想

  • 昨今でも飲食店が封鎖され、働き口がなくなった若者や大学の授業がすべてオンラインになって不便を被っている若者など、ロックダウン政策によって困っている印象を受けるのは確かに若年世代です。

  • この論文では、(一定のコストの元) 封鎖したセクターの労働者を他のセクターに再分配するような仮定をおいていますが、実際の社会においてそのコストを実際に支払うことはあるのでしょうか?

  • (まだ深く読めていないですが) ここでいうコストは、政府が各主体に労働力の移転を働きかけるためのコストであると想像します。しかし、労働者側にも再配分された仕事に順応するために支払うコスト(新しいスキルを得るために必要なものなど)があるようにも思われます。

  • コストの設定の仕方、影響などに着目して読み進めていこうと思います。


明日は続きを読んでいこうと思います。

よろしくお願いします。

6日目 "covid19 による死と消費とのトレードオフ"

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 6日目の記事です。


6日目

TRADING OFF CONSUMPTION AND COVID-19 DEATHS を読みました。

メモへのリンクは以下です。

github.com

消費とGDPの大幅な減少と、コロナウイルスによるパンデミックによる死者の減少をどのように両立させるべきなのだろう という問いに対し、丁寧に式設定を行い、生存者の消費とパンデミックによる死亡のトレードオフについて考えたものです。

具体的には、社会が放棄すべき消費を個人単位で分解し、個人の生涯効用を単年の消費により得られる効用と生存確率、平均余命で表し、その消費によっていくらか寿命が失われるような設定を置くとします。

その場合、代表的なエージェントは、パンデミックによる死亡を避けるために、死亡率が高い場合は1年間の消費の70%を犠牲にし、死亡率が低い場合は消費の38%を犠牲にするというのが妥当な数値として報告されています。

この数値は先行研究に比べて、幾分妥当であると述べられています。

感想

  • 式遷移は非常に丁寧だった
  • トレードオフ ( = 限界効用 ) を求めていることもあり、式を追って、統計資料との数値との差異についての説明が多かった
  • 手法の紹介? で だからどうする は読み取れなかった
  • この論文を紹介していた政策研究所の意訳では
家計が死によって被る不効用が想定されています。そしてこの不効用が十分に大きい場合、自身が感染するリスクが高まると予見されている状況下では、将来感染するよりも現在感染したほうがましであるという刹那的なバイアスが生まれて感染リスクのある経済活動が動機づけられるとしています。この刹那的なバイアスとそこから生じる外部性は、医療崩壊が懸念される状況下ではさらに強まることが示されています。

とあったのだが、このような内容を読みとることができなかったので精進が必要に感じた。

  • 紹介されている改良ポイントで、疫病流行下の "死亡率" について以下の言及があったのが興味深かった

コロナウイルス関連死を回避したことによる他の原因による死亡率への影響について

・(+) 社会的距離を縮めることは、交通事故や(最終的には)大気汚染による死亡を減少させる可能性がある

・(-) 予防ケアの遅れや精神的な健康状態の悪化につながる可能性もある

・ソーシャルディスタンスが他のコストをもたらすかもしれない

・余暇の質が悪影響を受ける可能性がある

・オンライン教育の質が同じようなものでなければ、子供を学校から帰宅させておくことは人的資本投資を低下させる可能性がある

・子どもたちの間でそのような投資の不平等を増大させる可能性がある

・米国では低所得者ほど社会的距離の影響をより強く受けている

  • 上記観点について考察のあるという

Cajnerら(2020)Jones and Klenow(2016) が紹介されており、以後読んでいきたいと思った。


以上です。ありがとうございます。

5日目 続々 "疫病のマクロ経済学"

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 5日目の記事です。


5日目

"疫病のマクロ経済" を読み終わりました。

メモへのリンクは以下です。

github.com

本日読んだ部分では、ウイルス流行による不況のメカニズムと封じ込め政策を行った場合についてシミュレーションを行い、封じ込め政策を行った方が長期的に経済へのダメージが少ないことを説明していた。

封じ込め政策の具体的な方法論としては消費増税を行い、一旦消費者から回収した収入分は後ほど還元するということだ。

その上で、政策立案者がどのように政策を実行すべきかという点に言及している。

ここで、面白いと思ったポイントは政策立案者が現実問題として以下のような圧力をかけられてしまう点を考慮している点である

  • 政策立案者は、経済活動への影響を考慮して、封じ込め措置を早期に終了させるよう強い圧力に直面する可能性
  • 政策立案者は、最適な封じ込め対策の実施を遅らせなければならないという圧力にも直面する可能性

いずれのケースにおいても、封じ込め政策は迅速に実施、かつ (周りの圧力に耐えながらも) 途中でやめることなく継続することが重要であると結論づけており、

これらの結論は、1918年のスペインでの疫病の証拠に照らし合わせても一致しているという。


感想

  • 封じ込め措置を早期に終了させるような強い圧力は直近でも緊急事態宣言の解除のような形でみた
  • 世論では、経済活動が止まってる分の損失はどうするんだ??? みたいな声もちらほら聞くが、この論文では、経済活動を止めることによる損失 < 経済活動を止めないことによる死者増の結果、労働力がへることによる長期的損失 としているため1つの反論材料になりそうだ (批判している人はこういった政策の論拠になっていそうな情報を如何程持っているのだろうか...)
  • とはいえやはり、マクロ経済の損失を減らすことに主眼を置いているため、以下に問題点がありそう

・(後ほど返すとはいえ、) 消費にかかる金額を増やすことで消費を抑えるという弱い個人がさらに困窮し得る

・そもそも封じ込め政策実現へのハードルが高そう (為政者は増税による支持率の低下のようなパラメータに支配されていそう。もっというと政策の結果、事態が収束することで上昇する支持率よりも、国民 (ミクロ) への負担を強いる政策の実行による短期的な支持率の低下を重視しそう)

  • 自分が関心を持っていた、過去の疫病流行時の知見は活かされていないのかという観点については、1918年のスペインでの疫病 が引き合いに出されていてよかった。

以上です。ありがとうございました。

4日目 続 "疫病のマクロ経済学"

こんばんは、kaerururu です。

個人プロジェクト 100DaysOfHealthEconomics, 4日目の記事です。


4日目

引き続き "疫病のマクロ経済" を読んでます。

進捗は 16 / 28 といったところです。まだ読み終わっていないのですが、メモへのリンク貼っておきます。

github.com

今日は、提案モデルの細かい仮定、定式化、パラメータの選定過程などが書かれているところを読んでいました。

丁寧に式遷移が書いてあるので、この分野に馴染みがない私でもふーんなるほどとなるくらいには理解が進んで面白いです。

内容とは少し主題がずれますが、この提案手法は、ベースとなる手法を経済的意思決定に依存させるように拡張したものであるという部分が一番のミソなのですが、拡張部分を制御するパラメータ (ここでは π1, π2) を 0にするとベースの手法に帰着できる。つまり、ベース手法を提案手法の限定的な状態であると表現していたのが先行者リスペクトを感じて良さみがありました。(数学でもナンタラ定理はカンタラの定理の n=1 の時を表すんやでみたいなアレがありますよね)

また、このモデルでは、感染経路を

消費活動時 (お買い物の時に感染者と接触する) 、労働時 (職場に感染者がいる)、その他 (ご近所さんが感染していた) みたいな 3ケースで場合分けして定義していますが、

  • 消費っていってもコンサートに行くのとスーパーに行くのとでは影響の大小違うよね?
  • 仕事って言ってもウエイターさんと歯医者さんとでは接触する人数違うよね?

みたいな部分は簡単のために無視されていました。 上記観点や、昨日私が感想で述べたような、

  • 消費っていってもネットショッピングもあるよね?
  • 仕事っていってもリモートワークもあるよね?

のような観点を組み込むことでさらに提案モデルは拡張できそうだなと思いました。

感想

  • 論文読みながら、自分の意見をぶつける(エア議論)という楽しみ方を見つけた
  • 数式を丁寧に追うと面白いが無限に時間がかかる
  • DeepL でギリシア文字が文字化けして厳しい (英語のまま読めるようになる必要性を感じている)
  • 読むのが遅いというところからの進歩が楽しみ ()

以上です。ありがとうございました。