infoMode

情報セキュリティからテクノロジー、お役立ち情報などを発信します。

機械学習を使って、産業革命が起きていない世界の温度変化を予測する

去年の9月頃に、ニューラルネットワークを用いて地球温暖化は起きているが、人類の活動が原因というより自然現象とする研究結果が発表されていました。

「地球温暖化は自然現象」豪研究チームがニューラルネットワーク用いて分析 | マイナビニュース

議論を呼びそうな内容ですが、機械学習を用いてif.の世界を予測するこの研究アプローチ自体はとても面白いと感じました。

一方で、同記事に掲載されている予測のグラフを見ると、必ずしもデータへのフィット率が良いとは言えないような...

f:id:rk12liv:20180315232928j:plain

(上記記事より抜粋。縦軸Temperatureだけど、偏差ではと思ったり...)

例えば250年から550年ぐらいまでの間の温度変化には全く追随していないようにも見えます。

 

予測した区間は1830年以降のカーブだということですが、ハイパーパラメーター次第でいくらでも変わってしまいそうな予測結果にも見えます。

250年から550年が学習データ区間内なのであれば、もう少し頑張って学習させても良いはずです。

私は地球温暖化について特定の意見を持っているわけではないのですが、このグラフ一発では何とも言えないなぁ...と思ったり。

よし、やってみよう!!

ということでやってみたいと思います。何はともあれデータがないと始まらないので、まずデータを集めに行きます。

地球温暖化に関してならIPCCなどがインフォグラフィックでわかりやすいデータを発表しているのですが、あいにく欲しいのは温度変化の数値データ。”historical temperature of the Earth”などそれっぽい言葉で検索をかけまくります。

 

ところがデータ参照元を明示しているほとんどのサイトでは、1880年からのデータ(NASA/GISS提供)でそれより古いデータは簡単には手に入らなさそうな問題が。

なぜか紀元前のデータを載せている怪しげなサイトもあったりしますが...どこから手に入れたのかと小一時間ツッコミたくなります。

 

一番信用できそうなのは、1880年からの計測データを公開しているNASA/GISS。

Data.GISS: GISS Surface Temperature Analysis (GISTEMP)

https://www.ncdc.noaa.gov/cag/global/time-series/globe/land_ocean/1/12/1880-2016

 データの中身はこんな感じ。この期間だけで見ると明らかに途中からトレンドが変わっているので、良い結果は出ないと判断。

f:id:rk12liv:20180315232945j:plain

研究チームはproxy temperature、いうならば間接的に観測された情報で補完された温度を使っているため、古い年代のデータもあります。

proxy temperatureの推定法として様々な文献にある年輪やサンゴを用いた方法を用いているようですが、どのぐらいconsistencyがあるデータセットなのかわからない。まぁいいや。

 

ならば...

グラフからデータを取得する

最初は人力OCRでデータを取ってこようかと思ったのですが、世の中には様々な便利ツールがあります。今回は、グラフからデータを取得してくれるというスグレモノに頼ります。

https://apps.automeris.io/wpd/

まずは画像を読み込ませ、既知の4つの点を選択します。

f:id:rk12liv:20180315233038j:plain

その後、Automatic Extractionで抽出したい色などを選択してRunを押せば、自動的に赤い点が表示されその座標点を引っ張ってくることができます。

当然画像の解像度が高ければ高いほど良いですが、今回手に入る画像の解像度ではこのぐらいが関の山で、データ数としては482とだいぶ少なくなった印象。(ざっくり4年ごとのデータ)

f:id:rk12liv:20180315233018j:plain

その後View Dataからcsvを作れます。いや、本当に便利。すごい。

データを観察

読み込んでみると、こんな感じになりました。データ数は減ったけど、おおまかな動きを予測するのには十分な気も。

f:id:rk12liv:20180315233105j:plain

先ほどのNASA提供のデータ(1880年から)だと確かに右肩上がりに見えますが、このグラフを見ると割とそうでもないような、でも1750年ぐらいからの上がり方が激しいような。なんとも言えません。

平均という意味では0-1000年と1000-2000年でたいして変わらない気もしますが、分散は大きくなっているように見えます。例えば黒点の活動データや、火山活動のデータ、CO2濃度の過去データがあれば比較ができますが温度でもこんなに苦労するので、きっと見つからないでしょう。

 

このデータが正しいとして話を進めます。

フーリエ変換で特定の周期を確認する

データも見たし早速機械学習アルゴリズムに放り込みたいところですが、予測をする前に周期的な変化というものがどのくらい含まれるか興味があります。

そこで温度変化には周期的な変化が含まれるとの仮定の元、先ほどの温度データにフーリエ変換をかけて主だった周期がないかどうか確認します。

f:id:rk12liv:20180315233133j:plain

これを見ると1000年周期のところでやや強い成分があるようですがピークというほどでもありません。

確かに750年から1750年などグラフ後半を見ると1000年周期の波が見えるような見えないような。期間が短くなればなるほど短期的な変化でブレるのも読み取れます。

仮にこの成分が自然現象によって裏打ちされたものだと仮定すれば、最近の温度上昇は周期的な温度変化の一部と主張する意見も理解できなくはありません。でも、上記結果はそのような解釈ができるほど明確な結果ではありません。

そして機械学習へ...

ようやく機械学習です。今回使うのはリカレントニューラルネットワークのLSTMと呼ばれる手法で、新しくはありませんが自然言語処理などの分野で安定した実績を誇ります。

実装についてはKeras(TensorFlowバックエンド)を用います。TensorFlow単体で使うと結構面倒ですが、Kerasだとscikit-learnっぽくfit/predictを使えて便利。

 

これで産業革命前のデータとして1830年までを学習させ、1830年以降を予測してみたいと思います。

LSTMあるある - x_testへのLeakageで予測のズレ

LSTMあるあるとしてLeakageがあります。

 

例えば時系列データをある時刻を元に前後二つに分け、その時刻より前を教師データ、後ろをテストデータに分けます。

その後LSTMで学習させ教師データに含まれていないテストデータで予測するといい感じだ、でもなんか数ステップズレてるだけに見えるというか、後追いしているだけに見える。

この場合、正しく予測できていない可能性があります。

Leakageを避けるためには、LSTMを用いて予測した値を再帰的に入力データとして使用する必要があります。x_testはあらかじめ切り分けておくのではなく、学習したモデルからの予測値で常に更新していくということです。

 

では、予測結果の方を見ていきましょう。

LSTMで1830年までを学習させ、1830年以降を予測する

5step前までのデータを元に予測、ニューロン数300で1000 epoch学習させてみた結果が以下。学習は十分と思われ、かつそこまで後出しジャンケンになっていないように見える。

f:id:rk12liv:20180315233158j:plain

では、1830年以降はどうなっているのでしょうか?以下が学習結果を元に予測したグラフです。オレンジの線が産業革命が起きた際の温度変化で、青色の線は、1830年以前のデータから1830年以降を予測させた場合の温度変化、つまり産業革命が起きなかった場合の温度変化になります。

1830年以前の状態(=産業革命が起きていない)のままの場合は、なんと温度変化は横ばいを続けるという結果になりました。これは予測結果が正しいと考えるなら、産業革命が起きていなければ近年の温暖化は起きていなかった可能性があると考えられます。

f:id:rk12liv:20180315233214j:plain

 

ここでおさらいすると、データ数の粗さの問題はあるにせよ前述の記事にある研究チームとほぼ同じ傾向のデータセットを使いました。

また手法については、RNNのうちLSTMと呼ばれるものを採用。研究チームと同じように1830年以前のデータから1830年以降の温度変化を予測しました。

その結果として本記事の予測では産業革命が起きていなかった場合、近年の温暖化は起きなかった可能性があるという結果を得ました。

改めて研究チームの予測結果を見てみると、この場合は産業革命が起きていなくても温暖化が起きると予測されています。正反対ですね...

f:id:rk12liv:20180315232928j:plain

まとめ

研究チームと(ほぼ)似たデータセットを使用し、LSTMで予測させてみたところ正反対の結果を得ました。ではどちらかが間違っているのかというと、プログラムミスでない限り断言するのは難しいと考えられます。

LSTMを使用した予測では、何stepまでさかのぼるか、ニューロンの数、RNNの種類、epoch数など人間が主観的に決めることのできるパラメーターが多くあります。

うがった見方をするならば、、、結論ありきで自分の欲しいグラフが出来上がるようなパラメーターチューニングを行い、良い結果を出すパラメーターセットに対して後付けで理論武装することもできてしまいます。

 

そのため元の論文にあるようにな、間接的に推定した温度変化のデータのみを元にLSTMで予測しました...というのはなかなか、強引にも思えます。

温度だけでなくCO2濃度の変遷や太陽の黒点活動、火山活動などのデータを元に多変量LSTMで、ハイパーパラメーターのチューニングをベイズ最適化で行えばもう少し客観性は上がりそうです。が、データを集めることが困難です。

 

本当はもうちょっと色々なパラメータでどう予測が変化するのかを確認したり、例えば1830年以外の地点で区切った場合どうなるかも検証してみたいものですが、またの機会に。お疲れさまでした。