0. 本記事を公開した経緯
こちらの記事は、2年前に勤務先の勉強会で紹介したテーブルデータの水増し(synthesis)に関する技術動向をまとめた資料です。
意外と需要のある話だということがわかったので、社内向けの文言を削除したうえで公開いたしました。
資料執筆以降で拡散モデルを利用した手法1や、LLMを一から学習させる手法2も出てきました。ですが、技術的なパラダイムシフトはまだ起こっていないように思いますので、本記事の内容は今でも参考になる部分があると思います。
1. はじめに
テーブルデータを扱っていて、「何らかのアルゴリズムを用いた学習に最低限必要なサンプルサイズが足りない。何とかしたい!」と思ったことはないでしょうか。
例えば、下記のようなデータを扱う場合にそう思うことがあるのではないでしょうか。
- ex.1. プライバシーなどの機微な事情から、限られたデータしか利用できない34567
- ex.2. データ加工が自動化・効率化できず、限られたデータしか用意できない(実務でありがち)
- ex.3. 正解ラベルに属すデータが極端に少ない6
本資料では、こうした場合に使えるテーブルデータ向けの水増し手法の外観を示します。
2. テーブルデータ向けの水増し手法
一般に、テーブルデータの水増し手法は画像のものとは異なります。そのため画像とテーブルデータとで、水増しを表す英単語がそれぞれ異なります。検索するときは要注意です。
- 画像データの水増し: augmentation
- 元画像の反転のみならず、拡大やノイズの追加などをし、本来あまり無かったタイプの学習用データを増やすイメージ
- "image augmentation"とか"data augmentation"などのキーワードで検索すると、文献が見つかりやすいです。
- テーブルデータの水増し: synthesis
- 学習データの分布に従うデータをランダムに生成していく。つまり、本物そっくりな学習用データを増やすイメージ
- テーブルデータの場合augmentationはやりづらいです。画像の場合、反転などで特徴量の値を大きく変えても正解ラベルは変わらないのですが、テーブルデータで同じことをするとラベルが変わらないとつじつまが合わなくなるからです8。
- "tabular data synthesis"とか"synthetic tabular data"などのキーワードで検索すると、文献が見つかりやすいです。
- 学習データの分布に従うデータをランダムに生成していく。つまり、本物そっくりな学習用データを増やすイメージ
3. 既存の主なアルゴリズム
本物に近いテーブルデータの水増しといえば、古くからSMOTE(Chawla et al. 2002)9のようなアルゴリズムが知られています。
ですが、テーブルデータの水増しは現在に至るまでhotな研究対象になっています。特に、様々な種類の値を含む元データの分布をいかに上手く再現するかが盛んに研究されている印象です。
参考文献3によると、近年出現した主なアルゴリズムには以下があります。(説明文は、参考文献のものから相当加筆しています)
3.1. MedGAN(Choi et al. 2018)10
- もともと、検診データや患者さんへの処置を記録したテーブルデータを水増しするために作られました。
- 医療データ以外にも使えますが、カテゴリデータなどの離散的なものしか生成できない制限があります。
- 画像用の同名のGANがあることに注意。
3.2. TGAN(Xu et al. 2018)7
-
カテゴリデータと数値データが混在したテーブルデータでも水増しできます。カテゴリ数や定義域がそれぞれ異なっていてもOKです。
- そのためTGANでは、離散変数・連続変数の分布をそれぞれ以下と見なします。扱う分布を限定する狙いと考えられます。
- 1つの離散変数の分布は、普通にカテゴリカル分布と見なします。
- 1つの連続変数の分布は、カテゴリカル分布と、(-1, 1)の値域に収まる数値の分布の組と見なします。
- そのためTGANでは、離散変数・連続変数の分布をそれぞれ以下と見なします。扱う分布を限定する狙いと考えられます。
- テーブルデータの各行が確率的に独立であることを仮定しているため、自己回帰性のあるデータには適しません。
- 同時期に提案されたTableGAN11はCNNベースですが、TGANはLSTMを使って1変数ずつ順繰りに分布を学習する点が異なります。
- 開発チームが過去に手掛けたSDV12などの手法に比べて、教師あり学習に向いた水増しデータができたと主張。
3.2.2. TGANの学習詳細
- まずはじめに、変数の分布を学習できるよう離散変数・連続変数を変換する前処理を行います。
-
離散の場合、テーブルデータのk列目の変数X_kをOne Hot Encodingしたベクトルの要素にノイズを足し、その後正規化。この結果をD_kとします。
- よって、D_kを再現できるカテゴリカル分布を推定するのがGANの仕事のひとつになります。
-
連続の場合はちょっと複雑で、変数ごとに下記の処理を順次実行して、i列目の変数からU_iとV_iという値を求めます。
- 1.テーブルデータのi番目の列に出現する元の変数X_iをGMMにかけ、m個の正規分布の山を得る。ここでは例えばm=3とする。
- 2.変数X_iに含まれるそれぞれの値x_i_jについて、3つあるそれぞれの山に属する確率を推定。この結果をU_iとする。
- つまり、U_iを再現するカテゴリカル分布を推定するのもGANの仕事になります。
- 3.同じく各x_i_jについて、属する確率が最も高い正規分布の山から何σ離れているかを計算。
- 4.上記3で求めた「何σ離れているか」の値を、下限-0.99、上限0.99としてclipする。この結果をV_iとする。
- よって、V_iを再現する分布を推定するのもGANの仕事になります。
-
離散の場合、テーブルデータのk列目の変数X_kをOne Hot Encodingしたベクトルの要素にノイズを足し、その後正規化。この結果をD_kとします。
-
連続値に対する前処理を図解したものは以下です。(この図はCTGAN論文13から引用。ただTGANと処理はほぼ同じ)
-
GeneratorのLSTMは、各変数について求めたU_i・V_iあるいはD_kを再現できるように順次学習していきます。(下図は原著論文7 Fig.1を引用)
- 最後に学習済モデルからU_i、V_iあるいはD_kに相当するデータを新たに生成します。それらに対して前処理と逆のことをすれば、元のデータそっくりなものが得られます。
3.3. CTGAN(Xu et al. 2019)13
- 3.2節で挙げたTGANを改良したものです。
- 学習方法はTGANからかなり変わり、LSTMから普通の多層ニューラルネットになりました。
-
変数の前処理方法も、その復元処理もTGANと基本はほぼ同じです。
- ただし連続変数の分布V_iを作るときに値をclipするかわりに、tanhで活性化するようになっています。
- カテゴリカル分布に従うU_iやD_kは、softmaxで活性化するようになっています。
- 原著論文ではCTGANとの比較用に、CTGANのGANの部分を変分オートエンコーダにまるごと差し替えたTVAEというアルゴリズムを開発したことが述べられています。
-
データセットによってはTVAEのほうが優れるとのことです(下図は原著論文13 table 2を引用)。
-
データセットによってはTVAEのほうが優れるとのことです(下図は原著論文13 table 2を引用)。
3.4. 非GANベースの手法
参考文献3によると、GANを用いない手法にもいくつか有力なものがあります。
3.4.1. Copula Flows for Synthetic Data Generation(Kamthe et al. 2021)4
- コピュラとは「複数の周辺分布をインプットにして、多変量の同時累積分布をアウトプットする関数」であり、正規分布では表現できない複雑な多変量分布を表すのに使えるものです1415。
-
連続値も離散値も取り扱い可能です。
- コピュラを使った従来手法では離散値を扱えなかったのですが、離散値の累積分布関数をいったん連続値のものに置き換えて解決している模様です(原著論文4 3.3節参照)。
-
3.3節で述べたCTGANよりも、教師あり学習に向いた水増しデータができたと主張。
- ただし、本手法の実装は公開されていない様子…
- 本手法のポイントは、n次元の多変量一様分布上の値から元データの値を求める関数を、コピュラと「フロー関数」というものを使って再現することです(原著論文4 Fig.2参照)。
3.4.2. Hierarchical Modeling Algorithm16
- RDB上のデータのように、階層構造を持つテーブルデータの水増しに特化した手法です。
- 一番下の階層にあるテーブルデータから順番にその中身のデータの分布を学習していきます。
-
分布の学習自体にはガウシアンコピュラを利用した手法を用います。
- 3.4.1項のものと同じ手法かは不明です。
3.4.3. 統計値を用いたプライバシ保護擬似データ生成手法(岡田ら 2017)17
- NTT系の研究所による手法です。
- 「データの各属性のヒストグラムと等しくなる乱数を線形変換することによって各属性の平均,分散共分散を正確に保持,各二属性間のクロス集計表の近似を保持する擬似データの生成方法」とのこと。
- 実装はあるらしいのですが、有償。(詳細後述)
4. 主な水増しツール
文献3によると、テーブルデータを水増しするアルゴリズムを実装した主なツールには以下があります。
- SDV18
- Mostly AI - Synthetic Data Platform6
- 1日あたり10万件までのデータ生成が永久に無償20。ここまでは素晴らしい。
- ユーザ登録には企業アカウントのメールアドレスが必要。困った。
-
非倫理的なバイアスを除去したデータの生成に優れるとの主張あり。
- 倫理対策がある手法は他に聞かないので、おそらくアルゴリズムは独自のものではないか。
- tasokarena21
- 有償。エンタープライズ版は年180万円から。
- 参考文献3によると、3.4.3で紹介したNTTによる論文のアルゴリズムを実装したものでは?とのこと。
4. ツールの利用例の資料
私の目についた資料を下記に示します。
- SDV
- 文献3の後半部分にある、「実験:SDVによる制約付き擬似データ生成」に利用例あり。
- ここには、出力内容に関する制約定義の言及もあります。
- あと忘れちゃいけません。本家本元のドキュメント22は、コード例がとても丁寧。必見。
- 文献3の後半部分にある、「実験:SDVによる制約付き擬似データ生成」に利用例あり。
- TGAN、CTGAN
-
GANで偽のテーブルデータを生成する23
- 丁寧な図解を交えて、CTGANの動作や水増しデータをXGBoostにかけた結果を解説。
- 本資料の補足として見ていただければ。
-
「TGAN, CTGANの使い方メモ」24にもそれぞれの使い方が示されています。
- ただ、SDVからTGANもCTGANも呼べるので、これらの単品での挙動を理解したい場合に参考になる程度か。
-
GANで偽のテーブルデータを生成する23
5. 所感
今のところテーブルデータ水増しに使うツールは、SDVがよいのではないかと思います。
特に、調べた範囲で優れていたCTGAN、TVAEを実行できるSDVが個人的には興味深いです。
CTGANを倒したものではなさそうですが、SDVではコピュラを使ったデータ水増しも実行できますし、おそらくSDVで扱えるアルゴリズムは今後もどんどん増えていくと予想されるからです。
実際2022年に入ってからもCTAB-GAN+5のような手法が提案されており、学習データの分布の再現に一層優れたものが出てくる期待があります。
Mostly AIも興味はあるのですが、利用にあたって企業アカウントのメールアドレスを必要とするため、自己啓発で使いづらいのが懸念点です。
オンラインツールのように見受けられるので、会社で利用したくても実際の案件のデータを渡せないのも悩ましいです。
6. 今後の課題
テーブルデータの水増しにおける今後の課題として、「学習データが真の分布よりも偏ったサンプルだったときに、分布推定結果をどう修正するか」ということが挙げられると思います。
2章で述べた通り、テーブルデータの水増し結果は学習データの分布に依存するからです。偏ったサンプルをもとにいくら水増しをしても偏ったデータしかできず、それらを学習したところでモデルの汎化性能は限界があります。
1章で述べたex.1やex.2のケースでは、大量に供与できないが元のデータ自体は多く存在し、その内容について知見を持つ人がいる可能性がありえます。
その場合は、人の知見を外からフィードバックできるアルゴリズムがあれば、上記の課題にアプローチできます。
そうしたフィードバックを可能にするアルゴリズムを、私がCTGANをベースに試作したものがあります25ので、別途紹介できればと思います。