はじめに
本記事では、合成データと呼ばれる技術について紹介します。
合成データとは
合成データとは、端的に言えば機械学習等の数学的手法を使って生成される、元の本物のデータセットと似た性質を持つ偽のデータセットのことです。
以下の2つの要件を満たしたデータを狭義では合成データと呼びます。
- 元のデータと統計的にある程度似ていること
例 : 平均、分散などの統計量が概ね一致する
- 元のデータと形式的、構造的に似ていること
例 : 「idが8桁の英数字」等の表現形式や、データ同士の相関が似ている
広義では、単に人工的に作成したデータを合成データと呼びます。
大別して4つの作り方があります。
- ダミーデータ / モックデータ
ランダムに作られるデータです。個人情報保護の観点からダミーを入れる必要がある際に使われるのが主な目的のデータです。本物のデータにフェイクを入れる目的で作られている場合が多いため、相関性は見られない事が多いです。
- ルールベースで生成された合成データ
事前定義された一連のルールによって生成された合成データです。統計値が一致するようにデータを作れば、データの統計や形式や構造を一致させることができます。しかし、再現するためのルールを全て見つけることは非常に困難で、できたとしても多大な労力を要しますが、データがまだない場合には使用する可能性があります。手順によっては復元される可能性もあるので注意が必要です。
- 人工知能(AI)または統計モデルによって生成された合成データ
人工知能(AI)アルゴリズムによって生成された合成データです。 AIモデルは、すべての特性、関係、および統計パターンを元データから学習します。 その後、このAIアルゴリズムは完全に新しいデータポイントを生成し、元のデータセットから特性、関係、統計パターンを再現するように合成データを作成することができます。
- 物理シミュレーション等のシミュレーションで得られるデータ
物理シミュレーション等を使い、シミュレーションのデータを収集します。広義では合成データと言え、データが全くない場合でもシミュレーションにより好きな状況のデータを作り出すことができます。
例えば、テスラ・モーターズは限りなく現実の公道に準拠した3Dモデルの街を取り込み、現実で発生した場合非常に危険であろう状況を意図的に作り出し自動運転機能がどう対処するか確認し、そのデータを収集し、機能改善に利用しています。
主要な用途
合成データには主要な用途が2つあります。
- データ数が不足している場合などに合成データを作り、分析等のタスク精度を改善する
こちらは主に機械学習等などのデータ分析タスクの精度を向上する目的で使われます。
例えば、発生するデータケースがレアすぎるため、特定のデータが全体に比べて非常に少数である場合、合成データを作成して不均衡解消することが考えられます。
また、画像データを合成データで作り出し、画像認識等のタスク精度を向上できることがあることが知られています。
近年は少数データであっても合成データを作り出すことができるアルゴリズムが提案されており、データ数不足でもデータ分析できたり、データ収集のコストが少ないため、データ分析のハードルを下げることもできます。
- プライバシー保護
合成データにした場合、個人情報ではなくただのデータになるため、個人情報が漏洩した場合でも被害がありません。
また、個人情報ではなくなるため、データ提供のハードルを下げることができます。
例えば、PoC(Proof of Concept : 実証実験)を行う場合など、合成データを提供してもらい、タスク精度等を確認することで本番運用を検討でき、円滑に業務提携を進められる、というような用途が考えられます。
AIMultipleによると、これらの効用、及びリアルデータ収集にかかる手間と金額への抵抗感より2024年にはデータ分析に利用されるデータの60%以上が合成データになるだろうと予想されています。
代表的な AI/統計 アルゴリズム
ここでは、合成データの中でテーブルデータを生成するアルゴリズムについて紹介します。
Copula (Gaussian Copula)
統計モデルの合成データ生成アルゴリズムです。
Copulaは接合関数と呼び、多変数の累積分布関数とその周辺分布関数の関係を示す関数のことです。もう少し噛み砕くと、複数の周辺分布をインプットにして、1つの同時分布をアウトプットする関数のことです。
$f_{Copula}$(周辺分布) $=$ 同時分布
周辺分布は、ただ一つだけの事象が起きる確率の分布です。例えば、Xの周辺確率とは、他の事象に関係なく、事象Xが発生する確率を指します。
同時分布とは、2つの離散型確率変数がそれぞれある値をとるときの確率です。XとYの同時確率分布は、XとYの組み合わせで起こる確率分布を指します。
同時分布には、周辺分布の情報に加えて、複数の依存関係の情報が含まれます。
この Copula を利用してデータの依存関係を学習させることで、合成データを生成することができます。
この中でも正規分布を仮定する、Gaussian copula と呼ばれる手法が代表的なものとして挙げられます。また、一様分布を仮定する t Copula も用いられたりします。
Copula は統計モデルであるため、少数データであっても学習自体は行うことができます。また学習も高速に行うことができます。
しかし、確率分布に従わないものやカテゴリ変数等のデータが多く含まれているとデータの特徴の再現が難しい傾向があります。
CTGAN (Modeling Tabular data using Conditional GAN )
CTGAN は GAN (敵対的生成ネットワーク: Generative Adversarial Network ) と呼ばれる手法をテーブルデータ対応させたモデルです。
GAN は DeepLearning の生成モデルであり、データから特徴を学習することで、実在しないデータを生成したり、存在するデータの特徴に沿って変換できます。
GANとは、一言で表すなら 生成器 ( Generator ) と 識別器 (Discriminator) の二つが互いに敵対的な学習を行うというものです。
Generator は生成したデータをなるべく本物に近づけるように、そして Discriminator は入力されたデータが本物か、それともGenerator が生成したデータが偽物か精度良く識別するように学習が行われます。
GANは元々画像生成を目的としていて、テーブルデータにそのまま適用すると、表形式データに含まれるような離散データと連続データの混合や、連続データの個別のデータが不均衡になったりすることによりモデリングが困難になるというような問題がありました。[7]
そのような問題を解決し、テーブルデータに対応したのが CTGAN です。
GAN は 画像生成の場合、生成モデルの中で最もくっきりとした画像が生成できます。つまり、学習が成功した場合は精度の高いモデルを作ることができます。
その反面 GAN の学習では、さまざまな「不安定性」が報告されています。まず、生成器 ( generator ) が似たようなデータしか出力しなくなるという、モード崩壊 ( mode collapse ) と呼ばれる現象が起きやすいことがよく知られています[10]。モード崩壊は、最適化の用語でいえば、モデルパラメータが悪い局所解にはまっている状態であるといえます。また、より悪い状況として、モデルパラメータがいずれの局所解にも収束せず、発散してしまうことがしばしばあります。さらに、Jensen–Shannonダイバージェンスに基づく標準的なGANでは、勾配消失現象が原理的に起きやすいことが指摘されています[11]。
そのため、GANの性能を引き出すためにはパラメータチューニングを行う必要性がある場合が多いです。
GAN をベースにした CTGAN においても、同様の特徴はあり、扱いが少し難しいモデルといえます。
Copula GAN
Copula GAN は Copula と GAN を組み合わせたモデルです。データの確率モデルを学習し、コピュラ理論に基づいて合成データを生成します。
Copula GAN は Copula と GAN を組み合わせており、学習には他のアルゴリズムと比較して時間がかかります。
TVAE( VAE to tabular data )
TVAE は VAE ( 変分オートエンコーダ: variational autoencoder ) をテーブルデータに対応させたモデルです。Triplet-based Variational Autoencoder (TVAE) とは別のモデルなことに注意してください。
VAE は Deep Learning による生成モデルであり、変分ベイズ推定法の一種です。
変分ベイズは潜在変数を含む確率モデルのベイズ推定を行うための手法です。
ここで、ベイズ推定は事前分布(同時分布)を仮定し、観測事象から、推定したい事柄を確率的な意味で推論し、事後分布(同時分布)を推定する手法です。
潜在変数は、確率モデルを考えるときに潜在変数を導入すると、複雑な分布をより単純な分布で表すことが可能になるため、導入されます。
一般的な確率問題ではベイズ推定による事後分布は計算が難しくなります。ここで、変分ベイズは事後分布を別の新しい分布で近似してしまおうという手法です。
ここで、変分ベイズは平均場近似を仮定したりして事後分布を推定する統計モデルですが、VAE では、事後分布を DNN( Deep Neural Network ) で学習させて近似します。こうすることで、真の事後分布が複雑な形状をしている場合でも、真の事後分布を近似できるようになります。この時の DNN にオートエンコーダが使用されているため、変分オートエンコーダと呼ばれています。
そして、事後分布 ( 同時分布 ) が推定 ( 近似 ) できれば、Copula と同様に生成モデルを作成できます。
VAE は GAN に比べて学習が安定しやすいという特徴があります。画像生成の場合はぼやっとした画像ができるという欠点がありますが、テーブルデータの場合は、特徴を大雑把に捉えて推定してくれて大きく外さないとも考えることができます。
また、GAN は DNN を2つ作っていたのに対し、VAE は1つで済むため学習が早くなり、扱いやすいモデルと言えます。
まとめ
- 合成データとは、人工的に作られたデータであり、データ数不足やプライバシー保護の観点で用いることができる
- Copulaは統計モデルで計算が早いが、確率分布に従わないデータの再現が難しい
- CTGANは GAN ベースのモデルで、学習が成功した時は精度が高いが、学習に不安定さも抱えており扱いが難しい
- Copula GAN は Copula と CTGAN を組み合わせたモデルである
- TVAE は VAE ベースのモデルで、大雑把だが、学習が安定しており扱いやすい
参考文献
[1] 合成データ : https://www.syntho.ai/ja/what-is-synthetic-data/
[2] 合成データ : https://tech.ledge.co.jp/entry/sdv
[3] 合成データ : https://blogs.nvidia.com/blog/2021/06/08/what-is-synthetic-data/
[4] テスラ合成データ : https://anyverse.ai/news/tesla-ai-day-physically-correct-synthetic-data/
[5] Copula : https://gmd.copernicus.org/preprints/gmd-2020-427/gmd-2020-427.pdf
[6] Copula : https://www.ism.ac.jp/editsec/toukei/pdf/68-1-087.pdf
[7] CTGAN, TVAE : https://arxiv.org/pdf/1907.00503.pdf
[8] GAN : https://arxiv.org/pdf/1406.2661.pdf
[9] GAN : https://ai-scholar.tech/articles/treatise/gansurvey-ai-371
[10] GANの不安定さ : https://tech.preferred.jp/ja/blog/smoothness-and-stability-in-gans/
[11] GANの不安定さ : Ian Goodfellow. NIPS 2016 Tutorial: Generative Adversarial Networks.
https://arxiv.org/abs/1701.00160
[12] GANの不安定さ : Martin Arjovsky and Leon Bottou. Towards principled methods for training generative adversarial networks. In International Conference on Learning Representations (ICLR), 2017.
[13] Copula GAN : https://arxiv.org/abs/2101.00598
[14] Copula GAN : https://hal.archives-ouvertes.fr/hal-03188317/document
[15] VAE : https://academ-aid.com/ml/vae
[16] VAE : https://ai-kenkyujo.com/term/what-is-vae/
[17] ベイズ推定 : https://ai-trend.jp/basic-study/bayes/bayes-estimator-theory/