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

機械学習において、表形式データは最も広く使用されているデータ形式の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)を使用してテーブル間の情報を統合します。

データ拡張手法一覧

以下に、各手法における代表的なモデルをまとめます。

大項目中項目小項目代表的手法
検索ベースエンティティ拡張
(行レベル)
統計InfogatherTUSD3L
知識ベースDas Sarma et al.EntiTablesTable2VecSANTOS
グラフ ベースInfogatherEmbDIHYTREL
PLM ベースStarmieAUTOTUS
スキーマ拡張
(列レベル)
値ベースの結合LSHアンサンブルJOSIE
セマンティック ベースの結合ARDAAutoFeatureFeatNavigatorPEXESODeepJoinOmniMatch
構造ベースの結合EmbDILeva
セル補完
(セルレベル)
属性名InfogatherEntiTablesRATA
エンティティ ID/名前EntiTablesRATA
セル値InfogatherEntiTablesRATACellAutoComplete
Ahmadov et al.TURL
テーブル統合
(テーブルレベル)
構成的InfogatherEntiTablesRATA
直接的ALITELeva
生成ベースレコード生成
(行レベル)
分布の保持Barak et al.Zhang et al.PATE-GANtable-GAN ITS-GANGANBLRSTaSyGOGGLECoDiRelDDPMDP-LLMTGen
クラス不均衡の認識CTGANcWGANSIGRNNSOS
機能構築
(列レベル)
明示的Kanter and VeeramachaneniExploreKitSMARTFEAT
暗黙的GAINSWang et al.
セル補完
(セルレベル)
統計的MICEMissForest
深層学習MIWAEHI-VAEGAINMIGANTabCSDI
テーブル合成
(テーブルレベル)
構成的(行または列を個別に生成する上記の手法の組合わせ)
直接的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