【衛星画像解析】夜間光データから機械学習を使ってGDPを推定してみた　


こんにちは、しゅれぬこ(@syurenuko)です。

この記事を書いている2021年3月現在、データ分析コンペプラットフォーム「Solafune」にて、「夜間光データから土地価格を予測」という非常にChallengingな内容のコンペが開催されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/ec38b3fb-1aa1-57e4-952a-13c44d8f2625.png)

[Solafune -夜間光データから土地価格を予測-](https://solafune.com/#/competitions/f03f39cc-597b-4819-b1a5-41479d4b73d6
 "")

https://solafune.com/#/competitions/f03f39cc-597b-4819-b1a5-41479d4b73d6


ざっくりどういうコンペか説明しますと、PlaceID（匿名化された地域ID）、Year（年）、MeanLight（その地域の平均光量）、SumLight（合計光量）の4つが与えられて、未知のテストデータのAverageLandPrice（土地価格）を予測せよといった内容です。
![夜間光GDP.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/7b60f2aa-6b90-591c-3964-474dd58a0340.jpeg)
土地価格が決まる要因として、都市部に近い、開発が進んでいて将来性が見込めるなどの様々なものがありますが、このコンペでは夜間光からいかに正確に土地価格を予測できるのかを競います。

夜間光はその土地の経済活動と密接な関係にあるため(都市部では光は強く、地方や自然が多い地域では光は弱くなる)、経済指標として活用したり、経済動向を分析・予測するといった活用事例があるとのこと。

**え、じゃあ夜間光データを使って土地価格以外にも何か予測してみよう！**

と思い付いてしまったので、各国の経済状況の指標であるGDP（国内総生産）の推定ができないか試してみました。

もちろん使えるデータは「**夜間光データから得られる情報のみ**」です。
果たしてどれくらいの精度が得られるのか検証です！

###実行環境
Google Colabratory
今回の記事で使ったコードは全て[私のGitHub](https://github.com/syurenuko/NightLight_GDP.ipynb)上で公開しています。

###参考記事&データ出典
記事作成にあたり、以下の記事を参考にさせていただきました。
[【入門】Pythonによる人工衛星データ解析（Google Colab環境）]
(https://qiita.com/takubb/items/97b2e4ed91cf417c4a66)
 [Python&R: 総合データサイトDatahubの使用法, R](http://www.mishou.be/2019/03/10/python-r-%E7%B5%B1%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%83%88datahub%E3%81%AE%E4%BD%BF%E7%94%A8%E6%B3%95-r-ver-1/)

使用したデータサイト
[Version 4 DMSP-OLS Nighttime Lights Time Series](https://ngdc.noaa.gov/eog/dmsp/downloadV4composites.html)
[【DataHub】Country, Regional and World GDP (Gross Domestic Product)](https://datahub.io/core/gdp)
[国土数値情報（国土交通省）](https://nlftp.mlit.go.jp/index.html)

機械学習で使用したデータセットはDMSP-OLS衛星の夜間光画像（2009
年）、DataHub.ioのGDPデータ（2009年）から独自に作成しました。

#1. 夜間光データを観察してみる
まずは衛星画像から夜間光データがどのようなものなのか観察してみます。
夜間光コンペの出典が”DMSP-OLS”ということで、ここのデータセットの衛星データを使いました。

各国の夜間光、光量の分布を可視化してみます。
・日本
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/4bc17f29-d88b-4502-a5ac-08e916f2ebfe.png)
・ドイツ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/fbc82e3f-5591-84b7-11da-2bee7b4cd946.png)
・中国
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/70107710-dfc4-7cb7-3964-0fd7edc4cf8a.png)
・イギリス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/289c642f-8e1f-9057-e572-4b1e1f44b03b.png)
綺麗ですね（小並感）
都市部に光が集中していることがよくわかると思います。

DMSP-OLS衛星には以下の特徴があります

1. 解像度が1kmメッシュ
2. 1kmメッシュごとに光量0~63の離散値を取る
3. 63段階の光の明るさは必ずしも比例していない(63以上は飽和していて正確に反映できていない)
4. 雲の影響で光を上手く検知できていない可能性がある

夜景で有名な函館市の夜間光を可視化してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/668e2ae2-38ef-a852-24e2-396676d8b35b.png)
１k㎡のピクセルで光量が可視化されていることがよくわかると思います

#2. 特徴量生成
GDPを推定するにあたり、有効であると思われる特徴量を作成していきます。
夜間光データ縛りということで特徴量を捻り出すのが大変そうです...

ということで以下の特徴量を作成しました。
GDPとの相関も確認していきます。（図の圧倒的にGDPが高い国はアメリカです）

1. **SumLight（合計光量）** 
光量の合計値です。合計光量が多いとその分経済活動が活発であると考えられるため、推定に寄与する特徴量になりそうです。実際にGDPとの関係を可視化すると合計光量が増えるに従ってGDPが増加する相関が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/87720082-5570-e06b-29b5-3b918e7637f1.png)

2. **MeanLight（平均光量）**
その国の面積の1㎢のピクセルあたり、平均してどれだけの光量をとっているのかの数値です。必ずしも平均光量の数値が高いからといってGDPも高いとは限らないことがわかります。経済活動が活発なGDPが高い国でも、光量も上から下までバラつきがあり国土面積がある程度あると平均光量はそこまで高くならない、ということでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/0a3ccd3d-db85-f6a3-d20f-6b4b3cb5e085.png)

3. **Area（面積）**
その国の面積です。面積が大きい分それに比例して経済活動の総量も増えるのでは、という仮説を立てて特徴量作成しました。（今回は1~63の光が検出された部分の合計を面積としたので実際の国土面積とは異なります。）確認してみると面積とGDPにはある程度の相関がありそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/b2007d6a-b3a4-3d4e-2e80-2cafcfa7babd.png)

4. **Counts_63（最大光量である光量63の個数）**
先ほどDMSP-OLS衛星の特徴で述べましたが、63段階の光は完全に比例していないため、飽和状態の可能性がある光量63に関しては別に考える必要があります。（例えば光量100相当の光であっても上限の光量63になっている）そこで光量63を取るエリアに関しては「特に経済活動が活発である」とみなし、この1k㎡のエリアがいくつあるのかカウントします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/d8765691-cd7a-35a3-29bd-42804e522fc1.png)

5. **Percentage_63（光量63の割合）**
「Counts_63」からの流れで、全体のうちの光量63の割合です。光量63の割合が高いからといってGDPが高いことにはならないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/6c812aa8-a094-c8b0-0358-35257e9a8c6c.png)

6. **Variation（光量のばらつき（変動係数））**
光が検出された1k㎡のエリアは1~63の値を取りますが、国によってこの63段階の光量のばらつきがどの程度なのか調べてみます（標準偏差だと面積のスケールによって値が左右されてしまうので、変動係数を用いてばらつきを調べます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/3ffce1ec-b706-d77b-3e87-68fd4f952f13.png)

7. **Mode（その国の最頻値の光量）**
国によって1~63の光量のうち、どの光量が最も頻繁に現れるのかを調べました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/6889d324-f016-c29d-fba0-6852e092c435.png)

光量max付近の数値を出してる国があったので、Modeで降順ソートして調べたらこの国々でした。
![スクリーンショット 2021-03-19 19.39.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/5d4fb1e5-115c-2c0b-26da-04a5d84c18a7.png)
マカオ、香港、シンガポールなど国土面積が狭く、経済活動が活発な国が目立ちますね。
シンガポールに至っては全体の86%が光量63...

・【参考】シンガポールの夜間光画像（真っ黄色でした）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/7c4b038f-f8bc-268f-1e3e-f18b4434c69e.png)


推定に効くのか微妙なのもありましたが、パッと思いついた特徴量はこれくらいですね...
とりあえずこれで学習を回してみましょう！

#3. トレーニングデータとテストデータに分割する
トレーニングデータ（機械学習で学習するデータ）とテストデータ（GDPの推定に使うデータ）に分割していきたいと思います。
GDPですがばらつきがかなり大きかったため、GDPの外れ値（第一四分位数ー1.5×四分位範囲以下 or 第三四分位数＋1.5×四分位範囲以上）を取る国は今回の検証では対象外としました。外れ値除去の結果残った171の国のデータを使っていきます

ということでtrain_test_split(test_size=0.25)でトレーニングデータ128個、テストデータ43個に分割しました。

機械学習モデルから推定されたGDPと実際のテストデータのGDPの値を比べて、夜間光データからどれくらい正確に推定できているのかを調べます。

#4. LightGBMで学習してみる
予測に当たって使用する機械学習モデルに、線形回帰やランダムフォレスト、NNなどがありますが、今回はKaggleなどの機械学習コンペの上位解法でもよく使われるGBDT系の機械学習アルゴリズム、”LihghtGBM”を使ってGDPを推定してみたいと思います。

k分割交差検証(n_split=5)で学習させます。
(データ数が少ないので学習に1秒ほどしかかかりませんでした笑)

一応下図がfeature importanceです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/ca889c09-d261-d04e-909c-792fedb71ef8.png)


SumLight(合計光量)が最も推定に寄与しているという結果になりました。

推定されたテストデータのGDP一覧が以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/4a245694-a029-6e42-719d-aad31deffc54.png)

#5.推定されたGDPと実際のGDPの値を比べてみる

では推定されたGDPと実際のGDPを比べてみましょう。散布図を作成し、両者の値が一致している赤い直線上からどれくらい外れているのか見てみます。決定係数（1に近いほど正確に推定できている）も確認してみます。

~結果~

・決定係数0.53417
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/32941c26-cdd9-fa27-7245-887a3a387d34.png)

ほぼ正確に推定できている国もありますが、GDPが高めの国は結構ブレが大きいですね...
特徴量取捨選択するなどし、改めて学習させて一番良い結果が出たのが下図です。

・決定係数0.61066
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407645/44310b7c-ffc8-324c-972b-89a542ce5114.png)

散布図がさっきとほとんど変わっていないように見えますが、GDP低めの国が赤線上付近に若干のまとまりを見せたのでわずかに改善しました。
決定係数0.61...決して悪い数字ではないとは思いますが微妙です。

結論ですが、
**「夜間光データはGDPの推定に全く寄与しないわけではないけれども、精度を求めようとするとそれだけでは物足りない部分あるなぁ...」**って感じですね。

しかし、「夜間光データのみ」から作ったモデルにしてはそれなりの精度を出すことができたのではないでしょうか？
今回は夜間光データのみでしたが、他の情報(人口など)を入れてみたり、対数変換を適用したり、他の機械学習モデルを用いることで更なる精度向上を見込めると思います。

ただここまでやっておいて今更なんだという話ですが、GDPの場合だとデータ数が少なすぎるので、推定精度向上のために機械学習であれこれ試してみるデータとしては不向きな気がします。市町村レベルとかの細かいデータにしてデータ数を確保し、市町村の財政力指数を夜間光データから推定するなどにしてもよかったかもしれません。（気になった方はやってみてください）

#6. 終わりに ~衛星データの可能性~
非常に簡単なモデルでしたが、各国のGDPを大まかに推定することができるモデルを作成することができました。他にも夜間光の増減から翌年のGDPを推定するなどという時系列的な扱いをしてみても面白いかもしれません。まだまだ使い道はたくさんあると思います。

最後に衛星データの可能性について。

衛星データを用いることで夜間光に限らず包括的に地球上を観察することができます。分解能もかなり向上しており、目的用途に合うセンサも様々なものがあるため、衛星という超マクロな視点により大きなブレイクスルーが起きるかもしれません。衛星は周回して地球を回っているので、ある地域の時系列変化なども簡単に比べることができますし、何より地理的制限がないため地球上どこでも観察可能なのが最大の魅力です。

国内でも民間ロケット打ち上げの試みがあるなど、今世界中で宇宙ビジネスが盛り上がりを見せています。将来的に衛星を宇宙に飛ばす金銭的技術的ハードルが下がったら、細かいニーズに合わせた衛星を飛ばし、得られたデータを提供するビジネスが展開される...かも？

非常に将来が楽しみな分野だと個人的に感じています。
この記事が夜間光データを始めとする衛星データの可能性を少しでも伝えられたら嬉しいです。