機械学習を革新する:たった7行のコードでAutoGluonを使ってKaggleのトップ4%を達成
美容とファッションの世界:魅力的な7つのステップでKaggleのトップ4%を目指すAutoGluonの革新的な機械学習コード
Slalom _buildで新しいデータエンジニアリングの役割を始めて以来、MLの経験を最新の状態にする必要があると気づきました。数年前の情報だと、データエンジニアリング/データサイエンスにおいては長い時間です。もっと効率的なMLタスクのために多くの自動化が作られていることでしょう。実際、AutoMLはMLワークフローで定期的に使用されるようになっていることを見て嬉しく思い、自分自身で試してみたいと思いました。
AutoMLの探求:機械学習の簡略化
AutoMLは、機械学習モデルの開発方法を革新します。従来のMLでは、データの前処理、特徴選択、モデルの調整など、時間のかかる作業が専門家によって行われます。AutoMLはこれらの複雑なプロセスを自動化し、分類、予測、回帰などのタスクに対して効果的なモデルを構築するために必要な時間と専門知識を大幅に削減します。この革新により、モデルの開発が加速されるだけでなく、誰でもPythonを知っていれば非常に迅速に予測モデルを実装することができるため、高度なMLもより多くの人々にアクセスしやすくなります!
なぜAutoMLが必要なのか?
簡単に言えば、効率性です。予測を数行のコードで取得できることの有用性は言うまでもありません。加えて、自動化されているため、予測が使用目的に対して十分に正確であれば、プロセスは追加の人間の入力なしで変化するデータやフィーチャに自動的に適応することができます。
どのように機能するのか?
AutoGluonは、データのトレーニングのために自動的にステップを実行します。大まかに言うと、以下のステップがあります:
- データの読み込みと検査AutoGluonは、データが指定されたターゲット列を持つタブular形式であることを期待します。また、サイズ、形式、変数のタイプ(数値、カテゴリー、テキストなど)など、データに初期チェックを実行します。
- データのクリーニングAutoGluonは、欠損値を特定して補完します。これは、数値列では平均値、中央値、最頻値を使用して欠損値を埋めるか、カテゴリー列では特別なトークンを使用して欠損値を補完するなど、いくつかの戦略を使用して行われます。また、重複行も削除します。
- 特徴エンジニアリングAutoGluonでは、カテゴリーデータのためにワンホットエンコーディング/ラベルエンコーディング/より洗練されたエンコーディングを自動的に実行します。テキストをMLモデルが使用できる数値形式に変換するためにNLPを使用し、日付や時間の特徴を曜日、月などのより有用な要素に展開します。
- データの変換アルゴリズムに応じて、必要に応じて正規化やスケーリングのような変換を実行し、データセット内の特定の特徴を修正するために対数変換などの変換を行うこともあります。
- 特徴選択と次元削減AutoGluonは自動的に特徴の相関を計算し、モデルの予測力に寄与しない特徴を削除し、次元の数を減らすためにPCA(主成分分析)などの技術を使用します。
- データの分割AutoGluonは、自動的に分割して内部でテストを実施し、トレーニング、検証、テストデータセットを生成することができます。
- モデルの選択AutoGluonは、以前に作成した分割データセットでさまざまなモデルを自動的にテストし、選択された測定メトリックに基づいてランク付けを行います。
- アンサンブルモデルの作成通常、アンサンブルモデルが作成されます。これは、重みがゼロでないモデルをスタックすることによって行われます。モデルスタッキングについては、こちらで詳しく読むことができます:https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205 です。
このリストは多くのデータエンジニアやデータサイエンティストに認識されるはずです。これらは通常、データクレンジングとMLのための準備に行われる手順であり、これによってその威力を実感できるはずです。
結果はどうですか?「マニュアルML」よりも優れていますか?
新しく開拓したコンサルタントとして、私は完璧な答えを持っています:
— それは状況によります
私は自分が参加したKaggleコンペの例を使います:
家の価格 – 上級回帰技術
販売価格の予測と特徴エンジニアリング、RF、および勾配ブースティングの実践
このコンペは、複数の物件の特徴に基づいて家の価格を予測することを目的としており、データは81列のCSV形式で提供されています。
AutoGluonでの「そのまま即戦力」の性能テスト
AutoGluonでのそのまま即戦力のテストを行うために、必要な構造を構築するためのドキュメンテーションに従い、モデルを「best_quality」でトレーニングしました
- トレーニングデータの読み込み:トレーニングデータをpandasのデータフレームに読み込んで構造を確認できるようにしました。これはこのタブラープレディクター(このコンペで使用しているもの)に必要です。
import pandas as pdfrom autogluon.tabular import TabularDataset, TabularPredictordf = pd.read_csv("/kaggle/input/house-prices-advanced-regression-techniques/train.csv")df.head(20)--- out ---Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition SalePrice0 1 60 RL 65.0 8450 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 2085001 2 20 RL 80.0 9600 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2007 WD Normal 1815002 3 60 RL 68.0 11250 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 2235003 4 70 RL 60.0 9550 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 2 2006 WD Abnorml 1400004 5 60 RL 84.0 14260 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 12 2008 WD Normal 2500005 6 50 RL 85.0 14115 Pave NaN IR1 Lvl AllPub ... 0 NaN MnPrv Shed 700 10 2009 WD Normal 1430006 7 20 RL 75.0 10084 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 WD Normal 3070007 8 60 RL NaN 10382 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 350 11 2009 WD Normal 2000008 9 50 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 4 2008 WD Abnorml 1299009 10 190 RL 50.0 7420 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 1 2008 WD Normal 11800010 11 20 RL 70.0 11200 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 12950011 12 60 RL 85.0 11924 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 7 2006 New Partial 34500012 13 20 RL NaN 12968 Pave NaN IR2 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 14400013 14 20 RL 91.0 10652 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 New Partial 27950014 15 20 RL NaN 10920 Pave NaN IR1 Lvl AllPub ... 0 NaN GdWo NaN 0 5 2008 WD Normal 15700015 16 45 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN GdPrv NaN 0 7 2007 WD Normal 13200016 17 20 RL NaN 11241 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 700 3 2010 WD Normal 14900017 18 90 RL 72.0 10791 Pave NaN Reg Lvl AllPub ... 0 NaN NaN Shed 500 10 2006 WD Normal 9000018 19 20 RL 66.0 13695 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 6 2008 WD Normal 15900019 20 20 RL 70.0 7560 Pave NaN Reg Lvl AllPub ... 0 NaN MnPrv NaN 0 5 2009 COD Abnorml 13900020 rows × 81 columns
2. ターゲットを指定する予測対象の列はSalePriceです。したがって、ラベルを設定し、その列の基本統計情報を確認します:
label = 'SalePrice'df[label].describe()--- 出力 ---count 1460.000000mean 180921.195890std 79442.502883min 34900.00000025% 129975.00000050% 163000.00000075% 214000.000000max 755000.000000Name: SalePrice, dtype: float64
3. モデルをトレーニングするAutoGluonでタブラーデータのモデルをトレーニングするのは非常に簡単です。ラベルとデータフレームを渡し、動作させるように設定します。指定したグループ(このケースではbest_quality)のモデルをトレーニングおよび評価します:
predictor = TabularPredictor(label=label, path="/kaggle/working", ).fit(df, presets='best_quality')--- 出力 ---指定されたプリセット: ['best_quality']スタックの構成 (auto_stack=True): num_stack_levels=1, num_bag_folds=8, num_bag_sets=1AutoGluonのトレーニングを開始しています...AutoGluonはモデルを"/kaggle/working/"に保存しますAutoGluon バージョン: 0.8.0Python バージョン: 3.10.10Operating System: LinuxPlatform Machine: x86_64Platform Version: #1 SMP Sat Jun 24 10:55:41 UTC 2023使用可能なディスク容量: 20.94 GB / 20.96 GB (99.9%)トレーニングデータの行数: 1460トレーニングデータの列数: 80ラベル列: SalePriceデータの前処理中...AutoGluonは予測問題を推測します: 'regression' (ラベル列のdtypeがintであり、多くの一意のラベル値が観測されたため)。ラベル情報 (最大値、最小値、平均、標準偏差): (755000, 34900, 180921.19589, 79442.50288) 'regression'が正しいproblem_typeではない場合は、predictor init時にproblem_typeパラメータを手動で指定してください (problem_typeを['binary', 'multiclass', 'regression']のいずれかで指定できます)データを前処理するために特徴量ジェネレータを使用しています...AutoMLPipelineFeatureGeneratorをフィットさせています... 使用可能なメモリ: 32451.21 MB 使用済みTrainデータ (元の状態) メモリ使用量: 4.06 MB (使用可能なメモリの0.0%) 各特徴量のデータ型を列の値に基づいて推測します。特徴量の特別なdtypesを手動で指定するには、feature_metadata_inをセットしてください。ステージ1のジェネレータ: AsTypeFeatureGeneratorをフィットさせています... 注意: ユニークな値が2つしか含まれていないため、3つの特徴量をboolean dtypeに変換します。ステージ2のジェネレータ: FillNaFeatureGeneratorをフィットさせています...ステージ3のジェネレータ: IdentityFeatureGeneratorをフィットさせています... CategoryFeatureGeneratorをフィットさせています... CategoryMemoryMinimizeFeatureGeneratorをフィットさせています...ステージ4のジェネレータ: DropUniqueFeatureGeneratorをフィットさせています...ステージ5のジェネレータ: DropDuplicatesFeatureGeneratorをフィットさせています...元のデータの特徴量のタイプ(生のdtypes、特別なdtypes): ('float', []) : 3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt'] ('int', []) : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...] ('object', []) : 43 | ['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', ...] 処理されたデータの特徴量のタイプ(生のdtypes、特別なdtypes): ('category', []) : 40 | ['MSZoning', 'Alley', 'LotShape', 'LandContour', 'LotConfig', ...] ('float', []) : 3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt'] ('int', []) : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...] ('int', ['bool']) : 3 | ['Street', 'Utilities', 'CentralAir'] データの元の特徴量数: 80, 処理後の特徴量数: 80 0.7秒 = フィット実行時間, 処理前のデータの特徴量数 80 → 処理後のデータの特徴量数 80Trainデータ (処理後)のメモリ使用量: 0.52 MB (使用可能なメモリの0.0%) データの前処理および特徴エンジニアリングの時間 = 0.73秒 ...AutoGluonは評価メトリック:'root_mean_squared_error'を使用して予測性能を評価します。このメトリックの符号は高いほど良いように反転しています。メトリックスコアは-1を乗算することでメトリックの値を取得できます。変更するには、Predictor()のeval_metricパラメータを指定してください...AutoGluonのトレーニングが完了しました、合計実行時間 = 1423.48秒 ... 最良のモデル:"WeightedEnsemble_L3"TabularPredictorが保存されました。ロードするには、次のように使用します:predictor = TabularPredictor.load("/kaggle/working/")
プロセスにはさまざまなモデルをトレーニングするために約30分かかります。
4. 予測の実行Kaggleはすでに提供されたテストデータセットを提出に使用するため、これを使用して結果を提出できます。
test_data = TabularDataset(f'/kaggle/input/house-prices-advanced-regression-techniques/test.csv')y_pred = predictor.predict(test_data)y_pred.head()--- out ---Loaded data from: /kaggle/input/house-prices-advanced-regression-techniques/test.csv | Columns = 80 / 80 | Rows = 1459 -> 1459WARNING: Int features without null values at train time contain null values at inference time! Imputing nulls to 0. To avoid this, pass the features as floats during fit!WARNING: Int features with nulls: ['BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath', 'GarageCars', 'GarageArea']0 121030.3593751 164247.5468752 186548.2343753 193435.8750004 184883.546875Name: SalePrice, dtype: float32
5. 結果の提出Kaggleに結果を提出するのは非常に簡単です(これは私の初めてのKaggleコンペティションなので、すべてが新鮮でした)
submission = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/sample_submission.csv')submission['SalePrice'] = y_predsubmission--- out ---Id SalePrice0 1461 121030.3593751 1462 164247.5468752 1463 186548.2343753 1464 193435.8750004 1465 184883.546875... ... ...1454 2915 79260.7187501455 2916 82355.2968751456 2917 165794.2812501457 2918 111802.2109381458 2919 212835.9375001459 rows × 2 columnssubmission.to_csv("/kaggle/working/submission.csv", index=False, header=True)
結果
Autogluonは箱から出てきた0.12082を獲得し、4847つの中で252位になりました-トップ5%であり、実際のコードはわずか7行です。
上位50〜75人(ほとんどはデータ漏洩によりシステムを不正に利用した人々)を除外すると…
…これは上位4%です
*記事時点でのすべての数値は正確です
それを改善できますか?
私の最高のエントリーは0.11985で、4847人の中で117位になりました-それは上位2.5%です。
これにはAutoGluonといくつかの基本的な正規化、特徴エンジニアリング、および非相関のペアを除外するなど、さまざまな要素が使用されています。
したがって、私の(もちろんさびた)専門知識はスコアに対してほんの0.00097の利益をもたらしました-これは現実のプロジェクトでは気付かれないかもしれません。
結論
自分で確認するためにノートブックをここで表示できます:バージョン8が最高のスコアで、バージョン1がOOBバージョンでした(コードバージョンは3つのドットメニューを選択してバージョンをブラウズできます)
notebookc8be23bae5
Kaggleノートブックでの探索と機械学習コードの実行| House Prices — Advanced Regressionからのデータを使用して…
www.kaggle.com
明らかに、そのコンテストでよりパフォーマンスの高いモデルを作成し、データサイエンスのテクニックの全スペクトルを使用して結果を出した多くの人々がいますが、結果に対する時間の比でAutoGluonは独自のクラスで勝者です。
AutoGluonは、MLのアーセナルにおける非常にパワフルなツールです。わずか数行のコードで非常に正確な予測を提供できる能力は、私の意見では他に類を見ないものであり、Kaggleの競技によっても証明されています。非常に優れたデータサイエンティスト/エンジニアのツールを熟知した人に勝ることはありませんが、データの非常に正確な予測を得るのに数週間かかることもありません。
著者について
Danは、Slalomのデータエンジニアリングの主任であり、お客様のデータ環境の近代化、機械学習、AIに焦点を当てています。
20年以上のスタートアップベテランであり、オーストラリアとイギリスの一流企業に対してソリューションの提供に成功するための高性能開発チームの構築とリーダーシップに特化した専門知識を持っています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles