はじめに

機械学習において分類問題などを扱う場合、学習対象データのクラス比率が不均衡であると正しい学習ができないことがあります。
このような場合、件数が多い方のデータを削減する「アンダーサンプリング」や、件数が少ない方のデータを増幅する「オーバーサンプリング」を行い、データのバランスを均一に近づけてから学習を行います。



VerticaはBALANCE関数を利用するとデータのバランシング(アンダー/オーバーサンプリング)が可能です。

BALANCE

コマンド構文

パラメータ名内容
output‑viewバランシング後のデータを格納するビュー名
input‑relationバランシング対象のテーブル、ビュー
response‑column従属変数(バランシングの基準となる列)
balance‑methodunder_sampling:件数が多いカテゴリのデータを削除します。
over_sampling:件数が少ないカテゴリのデータを増幅します。
hybrid_sampling:アンダー/オーバーサンプリングを組み合わせてサンプリングします。
weighted_sampling:under_samplingと同様の動作をします。
ratio=ratio(オプション) バランスの比率を指定します。デフォルトは0.5(50%)ずつになるようにバランシングされます。

利用例

例として以下のトランザクションデータが格納されているtransaction_dataテーブルを利用します。
fraud列が「TRUE」が正常なトランザクション、「FALSE」が異常なトランザクションデータです。


fraud列を目的変数とする正常/異常なトランザクションを分類するような予測モデルを作成しようとした場合、TRUE/FALSEの件数を集計してみると、FALSEの方が圧倒的に多い、偏りのあるデータであることが確認できます。
このような場合、以降の何れかの方法でバランシングが可能です。


アンダーサンプリング

アンダーサンプリングを実施し、FALSEのデータを削減します。


作成されたbalance_us_dataを確認するとFALSEのデータが削減されたことが確認できます。


上記のように件数が少ない方と同レベル(50%)まで削減するとデータ件数がかなり少なくなってしまいます。
このような場合は、ratioオプションで調整します。
以下の例ではTRUEのデータが全体の約20%になるようにFALSEのデータを削減します。


作成されたデータを確認するとTRUEデータがデータ全体の20%程度になるようにFALSEデータがアンダーサンプリングされています。


オーバーサンプリング

オーバーサンプリングを実施した場合は以下のように、TRUEのデータが増幅されます。


作成されたbalance_os_dataを確認するとTRUEのデータが増幅されたことが確認できます。


ハイブリットサンプリング

ハイブリットサンプリングは、以下のようにアンダー/オーバーサンプリングを組み合わせる手法です。
・件数の多いデータ:アンダーサンプリングでデータを削減
・件数の少ないデータ:オーバーサンプリングでデータを増幅


元は1000件のデータが、約500件ずつにバランシングされました。



参考情報

BALANCE
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/MachineLearning/BALANCE.htm

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。