REaLTabFormer (トランスフォーマーを使用したリアルなリレーショナルおよび表形式データ) は、さまざまなタイプの表形式データを合成するための統合フレームワークを提供します。合成リレーショナル データセットの生成には、シーケンスツーシーケンス (Seq2Seq) モデルが使用されます。非リレーショナル表形式データの REaLTabFormer モデルは GPT-2 を使用しており、独立した観測値を含む表形式データをモデル化するためにすぐに使用できます。
REaLTabFormer: トランスフォーマーを使用した現実的なリレーショナル データと表形式データの生成
ArXiv に関する論文
REaLTabFormer は PyPi で利用でき、pip で簡単にインストールできます (Python バージョン >= 3.7)。
pip インストール realtabformer
REaLTabFormer を使用してモデリングし、トレーニングされたモデルから合成データを生成する例を示します。
注記
このモデルは、非リレーショナル表形式モデルをトレーニングするときに、合成データ分布に基づいて最適な停止基準を実装します。合成データの分布が実際のデータの分布に近づくと、モデルはトレーニングを停止します。
モデルがデータによりよく適合できるように、 epochs
パラメーターを大きな数値に設定してください。最適な停止基準が満たされると、モデルはトレーニングを停止します。
# pip install realtabformerimport pandas as pdfrom realtabformer import REaLTabFormerdf = pd.read_csv("foo.csv")# 注: モデル化したくない# データ内の固有の識別子をすべて削除します。# 非リレーショナル テーブルまたは親テーブル。 rtf_モデル = REaLTabFormer(model_type="tabular",gradient_accumulation_steps=4,logging_steps=100)# データセットにモデルを適合させます。# 追加パラメータを # `.fit` メソッドに渡すことができます。rtf_model.fit(df)# モデルを次の場所に保存します現在のディレクトリ。 # 新しいディレクトリ `rtf_model/` が作成されます。 # その中に、モデルの # 実験 ID `idXXXX` を持つディレクトリが作成されます。モデルのアーティファクトが保存される# 場所にも作成されます。rtf_model.save("rtf_model/")# 実際のデータセットと同じ# 数の観測値を持つ合成データを生成します。samples = rtf_model.sample(n_samples=len( df))# 保存したモデルをロードします。 # 実験へのディレクトリを指定する必要があります。rtf_model2 = REaLTabFormer.load_from_dir(path="rtf_model/idXXXX")
# pip install realtabformerimport osimport pandas as pdfrom pathlib import Pathfrom realtabformer import REaLTabFormerparent_df = pd.read_csv("foo.csv")child_df = pd.read_csv("bar.csv")join_on = "unique_id"# のキー列が# 親テーブルと子テーブルの両方が同じ名前を持ちます。assert ((join_on inparent_df.columns) and(join_on in child_df.columns))# 非リレーショナル テーブルまたは親テーブル。 # unique_id field.parent_model = REaLTabFormer(model_type="tabular")parent_model.fit(parent_df.drop(join_on, axis=1))pdir = Path("rtf_parent/")parent_model.save(pdir)# は含めないでください。 # 最後に保存された親モデルを取得します。# # または、他の保存されたモデルを指定します。#parent_model_path = pdir / "idXXX"parent_model_path =sorted([p for p in pdir.glob("id*") if p.is_dir()],key=os.path.getmtime)[-1]child_model = REaLTabFormer(model_type="relational",parent_realtabformer_path=parent_model_path,output_max_length=None,train_size=0.8)child_model.fit(df=child_df,in_df=parent_df,join_on=join_on)# 親サンプルを生成します。parent_samples =parent_model.sample(len(parend_df) ))# に基づいて一意の ID を作成します。 Index.parent_samples.index.name = join_onparent_samples =parent_samples.reset_index()# リレーショナル観測値を生成します。child_samples = child_model.sample(input_unique_ids=parent_samples[join_on],input_df=parent_samples.drop(join_on, axis=1),gen_batch=64 )
REaLTabFormer フレームワークは、無効な合成サンプルをフィルタリングするための観察バリデータを簡単に構築するためのインターフェイスを提供します。以下にGeoValidator
の使用例を示します。左側のグラフは、検証なしで生成された緯度と経度の分布を示しています。右側のグラフは、カリフォルニア州の境界でGeoValidator
使用して検証された観測値を含む合成サンプルを示しています。それでも、これを生成するためにモデルを最適にトレーニングしなかったとしても、バリデーターなしで生成されたデータには無効なサンプル (境界の外側にある) はほとんどありません。
# !pip install geopandas &> /dev/null# !pip install realtabformer &> /dev/null# !git clone https://github.com/joncutrer/geopandas-tutorial.git &> /dev/nullimport geopandasimport seaborn as snsimport matplotlib.pyplot as pltfrom realtabformer import REaLTabFormerfrom realtabformer import rtf_validators as rtf_valfromShapely.geometry import Polygon、LineString、Point、MultiPolygonfrom sklearn.datasets import fetch_california_housingdef Lot_sf(data,samples,title=None):xlims = (-126, -113.5)ylims = (31, 43)bins = (50, 50)dd =サンプル.copy()pp = dd.loc[dd["経度"].between(data["経度"].min(), data["経度"].max()) &dd["緯度"].between (data["緯度"].min(), data["緯度"].max()) ]g = sns.JointGrid(data=pp, x="経度", y="緯度", marginal_ticks=True)g.plot_joint(sns.histplot,bins=bins, )states[states['NAME'] == 'カリフォルニア'].boundary.plot(ax=g.ax_joint)g.ax_joint.set_xlim(*xlims)g.ax_joint.set_ylim(*ylims)g.plot_marginals(sns. histplot, element="ステップ", color="#03012d")if title:g.ax_joint.set_title(title)plt.tight_layout()# 地理ファイルを取得states = geopandas.read_file('geopandas-tutorial/data/usa-states-census-2014.shp')states = states.to_crs("EPSG :4326") # GPS Projection# カリフォルニアの住宅データセットデータを取得 = fetch_california_housing(as_frame=True).frame# デモ用に小さなエポックを持つモデルを作成します。デフォルトは 200 です。rtf_model = REaLTabFormer(model_type="tabular",batch_size=64,epochs=10,gradient_accumulation_steps=4,logging_steps=100) # 指定されたモデルに適合します。また、num_bootstrap も減らします。デフォルトは 500 です。rtf_model.fit(data, num_bootstrap=10)# トレーニング済みモデルを保存します。rtf_model.save("rtf_model/")# バリデータなしで生データをサンプルします。amples_raw = rtf_model.sample(n_samples=10240, gen_batch=) 512)# 地理的なサンプルデータvalidatorobs_validator = rtf_val.ObservationValidator()obs_validator.add_validator("geo_validator",rtf_val.GeoValidator(MultiPolygon(states[states['NAME'] == 'California'].geometry[0])), (「経度」、「緯度」) )samples_validated = rtf_model.sample(n_samples=10240, gen_batch=512,validator=obs_validator, )# サンプルを視覚化するplot_sf(data, tables_raw, title="生のサンプル")plot_sf(data, tables_validated, title="検証済みのサンプル")
プロジェクトや研究で REaLTabFormer を使用する場合は、私たちの成果を引用してください。
@article{solatorio2023realtabformer, title={REaLTabFormer: Transformers を使用したリアルなリレーショナル データと表形式データの生成}、author={Solatorio、Aivin V. および Dupriez、Olivier}、journal={arXiv preprint arXiv:2302.02041}、year={2023}}
我々は、「強制避難状況における政策と対応を改善するための責任あるマイクロデータへのアクセスの強化」プロジェクト(KP-P174174-GINP-TF0B5124)に資金を提供してくださった世界銀行とUNHCRの強制避難に関する共同データセンター(JDC)に感謝します。基金の一部は、開示リスクとモザイク効果に関する研究のための合成母集団を生成するために使用される REaLTabFormer フレームワークの開発の支援に投入されました。
私たちも送ります?ハギングフェイスに?彼らがリリースするすべてのオープンソース ソフトウェアに対して。そして、すべてのオープンソース プロジェクトに感謝します。