AI技術の全盛期到来――その現場で働くAIエンジニアに求められるものは?
データを活用したさまざまなサービスや技術をAIと称し、今やAIという言葉をニュースで目にしない日はないのではないでしょうか。AIサービス・技術を支えるAI人材の数は全世界で30万人、実際の需要規模は100万人とも言われています。
一方でサービスや技術を早く世の中に出すというスピード競争とコスト観点から、実際に現場で働くAIエンジニアには、どのようにデータを処理すべきか考えて設計し、コードを実装してデータ処理して結果を出す、という即戦力が求められます。
本記事では、AIサービス開発に参画するAIエンジニアの仕事例として「時系列データの予測モデル作成」を4回の連載で紹介します。現実の時系列データを集めてきてデータ分析をしようとすると、どのような苦労があるか、私の経験からお伝えします。
時系列データをディープラーニングで予測するモデルを作ってみる
インターネット上に無料で公開されている政府統計データ「e-Stat」を利用して、ディープラーニングを用いて予測モデルを作ることにします。過去の統計量から、都道府県ごとの現在(または未来)の統計量を予測するモデルとします。
本記事で使用したソースコード、データはGitHubで公開しています。記事中では説明を省略した部分のソースコードと使用したデータがあり、実際にマシン上で動かしてみることができます。
- 使用したプログラム言語はPython 3、ディープラーニング部分にはPythonパッケージのtensorflow/Kerasを使用
- 各データファイル(CSV)は、政府統計の総合窓口(e-Stat)より「住民基本台帳人口移動報告」「住民基本台帳に基づく人口、人口動態及び世帯数調査」「賃金構造基本統計調査」「工業統計調査」「商用統計調査」を加工して作成
このような、サンプルデータを用いてプロトタイプのソースコードを作成し、想定するサービスや技術が作れるかという検証は、AIサービスを開発する初期段階でPoC(概念実証)としてよく行われています。
収集したデータとモデルの設計
以下のような、人の長期的な動向に関係がありそうなデータを集めてきたとします。
# | 政府統計コード | 政府統計名 | データ粒度 | データ範囲 | 列数 | 行数 | 列内容 |
---|---|---|---|---|---|---|---|
0 | 00000000(※) | 都道府県一覧 | 都道府県 | 全国 | 2 | 47 | 都道府県(prefecture),都道府県ID(prefecture_id) |
1 | 00200523 | 住民基本台帳人口移動報告 | 都道府県*月 | 全国*200504-201908 | 5 | 8131 | 日時(datetime),都道府県(prefecture),転入者(mig_in),転出者(mig_out),県内移動者(mig_internal) |
2 | 00200241 | 住民基本台帳に基づく人口、人口動態及び世帯数調査 | 都道府県*年 | 全国*2000-2019 | 6 | 940 | 日時(datetime),都道府県(prefecture),男性人口(pop_male),女性人口(pop_female),人口合計(pop_sum),世帯数(pop_households) |
3 | 00450091 | 賃金構造基本統計調査 | 都道府県*年 | 全国*2008-2018 | 6 | 517 | 日時(datetime),都道府県(prefecture),労働者平均年齢(wag_age),労働者の平均月給(wag_salary),労働者平均賞与(wag_bonus),労働者人数(wag_workers) |
4 | 00550010 | 工業統計調査 | 都道府県*年 | 全国*2000-2018(欠損年あり) | 7 | 752 | 日時(datetime),都道府県(prefecture),工業事業所数(idt_offices),工業従業員数(idt_employees),工業給与総額(idt_salaries),工業原材料総額(idt_costs),工業出荷総額(idt_sales) |
5 | 00550020 | 商業統計調査 | 都道府県*年 | 全国*1982-2014(概ね3年間隔) | 5 | 564 | 日時(datetime),都道府県(prefecture),卸小売事業所数(ret_offices),卸小売従業員数(ret_employees),卸小売商品販売額(ret_sales) |
現実のプロジェクトでは事前に技術開発する目標を定め、目的を表現できるような周辺データを計画的に集めますが、ここでは本記事執筆のために任意に集めました。
モデルの設計(目標)が、今年の住民基本台帳人口移動報告にある都道府県別の転入者数(mig_in)を、前年のすべてのデータを用いて予測する、というものであったとします。前年のデータから今年を予測するという部分は、今年のデータから来年を予測する、と置き換えても同じです。
データ前処理の設計
実際に集めた現実のデータは、インターネットで機械学習用に公開されているデータのようにキレイに整っていて、すぐに学習器に掛けられるということはありません。機械学習用の公開データは公開する人がデータを整形してから公開してくれているためです。このようなデータ分析や機械学習器に適した形にデータを整える作業・処理は、データの前処理と呼ばれます。
今回集めたデータは、以下のようにデータの粒度がマチマチであったり、期間に欠損があったりという、キレイなデータを前提とする学習器に対しては問題があります。図はクリックまたはタップすると、拡大画像がポップアップ表示されます(以下同様)。
これらに対し、データ粒度を合わせ、欠損を補間して使用したいとします。まずは最もシンプルに、データ全体から見て情報粒度を最大のもの(年次データ)に合わせ、データ期間を共通部分に合わせるという前処理設計にします。