機械学習における表形式データのオーグメンテーション

機械学習において、表形式データは最も広く使用されているデータ形式の1つです。しかし、高品質な表形式データを大量に取得することは依然として大きな課題となっています。この課題を克服するために、オーグメンテーション技術が注目されています。オーグメンテーションとは、既存のデータセットに新たなデータを追加することで、モデルの性能を向上させる手法です。特に、生成AIを活用した表形式データの拡張が最近の研究で注目されています。
表形式データのオーグメンテーションには、主に二つのアプローチがあります。一つは、生成ベースのアプローチであり、もう一つは検索ベースのアプローチです。生成ベースのアプローチでは、生成モデルを用いて新しいデータを生成します。これには、敵対的生成ネットワーク(GAN)や変分オートエンコーダ(VAE)などの技術が含まれます。一方、検索ベースのアプローチでは、既存のデータプールから関連するデータを検索し、拡張に利用します。
これらのアプローチは、それぞれ異なる特性を持ち、適用するタスクや要件に応じて選択されます。例えば、生成ベースのアプローチは、外部データソースに依存せずにデータを生成できるため、データのプライバシーやセキュリティが重要なシナリオで有用です。一方、検索ベースのアプローチは、既存のデータを活用するため、データの一貫性や信頼性を維持しやすいという利点があります。
今回は、表形式データのオーグメンテーションに関する最新の研究動向と技術を包括的にレビューし、今後の展望についても考察します。特に、生成的AIの活用がどのようにオーグメンテーションの可能性を広げるかに焦点を当て、具体的な事例や応用についても紹介します。
データ拡張の分類
表形式データのデータ拡張(Tabular Data Augmentation, TDA)は、大きく分けて検索ベースと生成ベースの2つの手法に分類されます。

1. 検索ベースの手法
既存のデータセットや外部のデータソースから関連するデータを検索し、元のデータセットに統合します。これにより、データ量を増やすだけでなく、文脈的な一貫性を保ちながら多様性を向上させます。
- 例:
InfoGatherは、関連するテーブルを検索して値を抽出し、元のデータセットを強化します。
EntiTablesでは、エンティティ間の関連性に基づいてデータを補強する技術が提案されています。
2. 生成ベースの手法
生成モデルを使用して、新しいデータを合成する手法です。主に以下の技術が利用されます:
- GANs (Generative Adversarial Networks): 元データの分布を学習し、それに基づいて新しい行を生成します。
- VAEs (Variational Autoencoders): データの潜在空間を利用して新規データを生成します。
- 拡散モデル (Diffusion Models): 拡散過程を逆方向にたどることで、より現実的なデータを生成します。
- 例:
CTGANは、クラス間の不均衡を考慮してデータを生成します。
TabDDPMでは、拡散モデルを用いて表形式データの分布を近似し、リアルなデータを生成します。
データ拡張のレベル
データ拡張は、次の4つのレベルで行うことができます:
1. 行レベルの拡張
新しい行を追加し、データの多様性を向上させます。
- 例: PATE-GANは、統計的特性を維持しつつ行を生成します。
2. 列レベルの拡張
新しい特徴量(列)を生成し、モデルが学習できる情報を増やします。
- 例: SMARTFEATは、基盤モデルを用いて新規特徴を生成します。
3. セルレベルの拡張
欠損値を補完したり、セル内の値を修正します。
- 例: GAINでは、深層学習を活用して欠損値を埋める技術が提案されています。
4. テーブルレベルの拡張
複数のテーブルを統合し、データセット全体を拡張します。
- 例: ALITEは、完全分離(Full-disjunction)を使用してテーブル間の情報を統合します。

データ拡張手法一覧
以下に、各手法における代表的なモデルをまとめます。
大項目 | 中項目 | 小項目 | 代表的手法 |
---|---|---|---|
検索ベース | エンティティ拡張 (行レベル) | 統計 | Infogather、TUS、D3L |
知識ベース | Das Sarma et al.、EntiTables、Table2Vec、SANTOS | ||
グラフ ベース | Infogather、EmbDI、HYTREL | ||
PLM ベース | Starmie、AUTOTUS | ||
スキーマ拡張 (列レベル) | 値ベースの結合 | LSHアンサンブル、JOSIE | |
セマンティック ベースの結合 | ARDA、AutoFeature、FeatNavigator、PEXESO、DeepJoin、OmniMatch | ||
構造ベースの結合 | EmbDI、Leva | ||
セル補完 (セルレベル) | 属性名 | Infogather、EntiTables、RATA | |
エンティティ ID/名前 | EntiTables、 RATA | ||
セル値 | Infogather、EntiTables、RATA、CellAutoComplete、 Ahmadov et al.、TURL | ||
テーブル統合 (テーブルレベル) | 構成的 | Infogather、EntiTables、RATA | |
直接的 | ALITE、Leva | ||
生成ベース | レコード生成 (行レベル) | 分布の保持 | Barak et al.、Zhang et al.、PATE-GAN、table-GAN、 ITS-GAN、GANBLR 、STaSy、GOGGLE、CoDi、RelDDPM、DP-LLMTGen |
クラス不均衡の認識 | CTGAN、cWGAN、SIGRNN、SOS | ||
機能構築 (列レベル) | 明示的 | Kanter and Veeramachaneni、ExploreKit、SMARTFEAT | |
暗黙的 | GAINS、Wang et al. | ||
セル補完 (セルレベル) | 統計的 | MICE、MissForest | |
深層学習 | MIWAE、HI-VAE、GAIN、MIGAN、TabCSDI | ||
テーブル合成 (テーブルレベル) | 構成的 | (行または列を個別に生成する上記の手法の組合わせ) | |
直接的 | TransTab |
Pythonで表形式データ拡張
Pythonから簡単に利用できる表形式データ生成用のライブラリにCTGANというものがあります。
CTGANは、既存の表形式のデータ(例えば、顧客情報や販売データなど)を学習し、それと似た特徴を持つ新しいデータを生成することができるライブラリです。
生成されたデータは、元のデータと統計的に似た性質を持ちながら、個々のデータは架空のものとなります。このため、プライバシー保護が必要な場合や、データの量を増やしたい場合など、様々な場面で活用できます。
ではまず、以下の通りCTGANをインストールしましょう。
# PyTorchのインストール
# 詳細はホームページを参照: https://pytorch.org/
$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CTGANのインストール
$ pip install ctgan
Windows環境で利用する場合は、環境変数関連でエラーが出ることがあるので、これから紹介するコードを実行する前に、以下のコードを実装してください。(環境変数LOKY_MAX_CPU_COUNT
が設定できていればOKです。)
import os # pipコマンドからインストール可能 # $ pip install psutil import psutil physical_cores = psutil.cpu_count(logical=False) logical_cores = psutil.cpu_count(logical=True) cpu_count = max(1, min(physical_cores, logical_cores)) os.environ['LOKY_MAX_CPU_COUNT'] = str(cpu_count)
次に、動作確認で利用するテーブルデータを読み込みます。変数discrete_columns
は、カテゴリ変数のカラム名を定義したもので、CTGANの学習時に指定することになります。
from ctgan import load_demo # 戻り値はPandasのDataFrame型 real_data = load_demo() # Names of the columns that are discrete discrete_columns = [ 'workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country', 'income' ]
では、早速CTGANのインスタンスを生成して学習させてみます。最後にCSVファイルに出力してます。
from ctgan import CTGAN ctgan = CTGAN(epochs=10, cuda=False) ctgan.fit(real_data, discrete_columns) # Create synthetic data synthetic_data = ctgan.sample(1000) synthetic_data.to_csv("synthetic_data.csv")
実行してみると分かりますが、処理時間は思ったよりもかかりません。それと、非常に少ないコードで表形式データの拡張が実現できることがわかると思います。参考までに、生成したCSVを以下にリンクしておきます。
まとめ
表形式データのデータ拡張は、機械学習の性能向上において非常に重要な技術です。生成モデルや検索ベースの手法、構造認識型手法など、さまざまなアプローチが存在し、それぞれに利点と課題があります。今後の研究では、これらの手法を組み合わせることで、より効果的なデータ拡張が可能になることが期待されます。また、具体的な応用例を通じて、データ拡張の実用性とその効果を示すことが重要です。
More Information
arXiv:2407.21523, Lingxi Cui, Huan Li, Ke Chen, Lidan Shou, Gang Chen, 「Tabular Data Augmentation for Machine Learning: Progress and Prospects of Embracing Generative AI」, https://arxiv.org/abs/2407.21523