<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Feature-Engineering on M1KE BL0G</title><link>https://www.m1ke.org/tags/feature-engineering/</link><description>Recent content in Feature-Engineering on M1KE BL0G</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>mike</copyright><lastBuildDate>Sun, 20 Sep 2026 08:00:00 +0900</lastBuildDate><atom:link href="https://www.m1ke.org/tags/feature-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>特徴量エンジニアリングの手法</title><link>https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/</link><pubDate>Sun, 20 Sep 2026 08:00:00 +0900</pubDate><guid>https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/</guid><description>&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/fe.jpeg" alt="Featured image of post 特徴量エンジニアリングの手法" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kaggleに良い記事（&lt;code&gt;Feature Engineering&lt;/code&gt;）があったので復習した&lt;/li&gt;
&lt;li&gt;内容は基礎的だが改めてどう特徴量を作るのがいいのかのヒントになった&lt;/li&gt;
&lt;li&gt;普段はDNNのアーキテクチャや学習方法に意識が向きやすく、入力側の処理も標準化（Z値化ぐらい）にとどまることが多かった&lt;/li&gt;
&lt;li&gt;しかし、モデルが学習できる情報は、最終的には入力として与えたデータによって決まる&lt;/li&gt;
&lt;li&gt;特に表形式データでは、列の意味に応じた型の整理、変換、集約、交互作用の表現などが、モデル選択と同じくらい重要になる&lt;/li&gt;
&lt;li&gt;特徴量をどのように発見・設計するかを改て整理した&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特徴エンジニアリング"&gt;特徴エンジニアリング&lt;/h2&gt;
&lt;h3 id="特徴エンジニアリングとは"&gt;特徴エンジニアリングとは&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;特徴量エンジニアリングとは、生データを機械学習モデルが学習しやすい入力へ加工する作業&lt;/li&gt;
&lt;li&gt;特に、特徴を適切に行うと、予測精度、汎化性能、解釈性、計算効率の向上が期待できる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;see &lt;a class="link" href="https://www.geeksforgeeks.org/machine-learning/what-is-feature-engineering/" target="_blank" rel="noopener"
&gt;Feature Engineering - GeeksforGeeks&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="全体プロセス"&gt;全体プロセス&lt;/h3&gt;
&lt;p&gt;この画像が一番わかり易い。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/feature-engineering.webp"
width="800"
height="400"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/feature-engineering_hu_5c8b4c6c5f78fe99.webp 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/feature-engineering_hu_11ce3bb9211bbb48.webp 1024w"
loading="lazy"
alt="Feature Engineering Architecture"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="480px"
&gt;&lt;/p&gt;
&lt;p&gt;複数のソースからデータを集めて、前処理をしてモデルに学習させて、インサイトを得るという流れ。&lt;/p&gt;
&lt;p&gt;特に、複数Sourceをマージする必要があるので、重複チェックなどが地味に重要だったりする。&lt;/p&gt;
&lt;h3 id="特徴の処理"&gt;特徴の処理&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/f2.png"
width="801"
height="400"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/f2_hu_dcc33d92722375a3.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/f2_hu_7eada580de1cd86d.png 1024w"
loading="lazy"
alt="5つの特徴の処理"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="480px"
&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feature Creation（特徴量の作成）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;既存データや業務知識から、新しい列を作る&lt;/li&gt;
&lt;li&gt;例：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;購入金額 ÷ 購入回数 → 平均購入単価&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;生年月日 → 年齢&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Transformation（特徴量の変換）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;特徴量が表す情報は保ちながら、モデルが扱いやすい形式に変える&lt;/li&gt;
&lt;li&gt;例：
&lt;ul&gt;
&lt;li&gt;商品カテゴリをOne-Hot Encodingで数値化&lt;/li&gt;
&lt;li&gt;偏りの大きい売上金額を対数変換&lt;/li&gt;
&lt;li&gt;年齢を「10代・20代・30代」に区分&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Extraction（特徴抽出）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;元の特徴量から、より重要な情報を別の表現として取り出す&lt;/li&gt;
&lt;li&gt;例：
&lt;ul&gt;
&lt;li&gt;PCAで多数の列を少数の主成分に圧縮&lt;/li&gt;
&lt;li&gt;文章をベクトルに変換&lt;/li&gt;
&lt;li&gt;画像から輪郭や形状を抽出&lt;/li&gt;
&lt;li&gt;日時から曜日や時間帯を取り出す&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Selection（特徴選択）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;利用可能な特徴量の中から、予測に役立つものだけを選ぶ&lt;/li&gt;
&lt;li&gt;例
&lt;ul&gt;
&lt;li&gt;代表的な方法は、相関などを使う&lt;strong&gt;フィルター法&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;特徴量の組み合わせごとにモデル性能を測る&lt;strong&gt;ラッパー法&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;学習と同時に選択する&lt;strong&gt;組み込み法&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;不要な特徴量を減らすことで、過学習の抑制や高速化につながる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Scaling（特徴量のスケーリング）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;数値の桁や範囲を揃え、値の大きな特徴量だけが過剰に影響するのを防ぐ&lt;/li&gt;
&lt;li&gt;例：
&lt;ul&gt;
&lt;li&gt;Min-Max Scaling：値を原則として0〜1に変換&lt;/li&gt;
&lt;li&gt;Standard Scaling：平均0、標準偏差1になるよう標準化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;特に、k-NN、SVM、ニューラルネットワーク、勾配降下法を使うモデルでは重要&lt;/li&gt;
&lt;li&gt;一方、決定木やランダムフォレストでは通常、影響は比較的小さくなる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="特徴の処理の違い"&gt;特徴の処理の違い&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;処理&lt;/th&gt;
&lt;th&gt;目的&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Creation&lt;/td&gt;
&lt;td&gt;新しい情報を作る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transformation&lt;/td&gt;
&lt;td&gt;情報の形式を変える&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extraction&lt;/td&gt;
&lt;td&gt;情報を要約・抽出する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Selection&lt;/td&gt;
&lt;td&gt;使用する情報を選ぶ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;数値の尺度を揃える&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="特徴エンジニアリングの流れ"&gt;特徴エンジニアリングの流れ&lt;/h3&gt;
&lt;p&gt;実際の流れは一般に、次のような流れになる&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. データクリーニング
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 欠損値の処理
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 重複・異常値の処理
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 表記やデータ型の統一
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 特徴量の変換・作成・抽出
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ カテゴリ変数のエンコーディング
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 標準化・正規化
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 対数変換
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 新しい特徴量の作成
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 特徴選択
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 不要・冗長な特徴量の除外
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;なお、前処理はそれらを包含する概念として扱われる事が多い。&lt;/p&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;h3 id="データセットの概要"&gt;データ・セットの概要&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The Ames Housing Dataset is a well-known dataset in the field of machine learning and data analysis. It contains various features and attributes of residential homes in Ames, Iowa, USA. The dataset is often used for regression tasks, particularly for predicting housing prices.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Ames Housingは、アイオワ州エイムズ市の住宅販売データ&lt;/li&gt;
&lt;li&gt;2011年にDean De Cockが、統計教育で長らく使われてきたBoston Housingデータセットの代替として公開したデータセット&lt;/li&gt;
&lt;li&gt;Kaggleの&lt;code&gt;House Prices: Advanced Regression Techniques&lt;/code&gt;コンペティションの題材にもなっている&lt;/li&gt;
&lt;li&gt;このデータを使っているので、予め説明した&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="目的変数と説明変数"&gt;目的変数と説明変数&lt;/h3&gt;
&lt;p&gt;目的変数:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SalePrice&lt;/code&gt;（実際の販売価格）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;説明変数（全部で78個）:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GrLivArea&lt;/code&gt;: 地上の居住面積&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LotArea&lt;/code&gt;: 敷地面積&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TotalBsmtSF&lt;/code&gt;／&lt;code&gt;FirstFlrSF&lt;/code&gt;／&lt;code&gt;SecondFlrSF&lt;/code&gt;: 地下室・1階・2階の床面積&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TotRmsAbvGrd&lt;/code&gt;: 地上の部屋数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BldgType&lt;/code&gt;: 住居の構造種別（一戸建て・二世帯・タウンハウスなど）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Neighborhood&lt;/code&gt;: 近隣地区&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MSSubClass&lt;/code&gt;: 住居の種類を表すコード&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SaleType&lt;/code&gt;: 販売形態&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WoodDeckSF&lt;/code&gt;／&lt;code&gt;OpenPorchSF&lt;/code&gt;／&lt;code&gt;EnclosedPorch&lt;/code&gt;／&lt;code&gt;ScreenPorch&lt;/code&gt;: ウッドデッキ・各種ポーチの面積&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SalePrice&lt;/code&gt;: 実際の販売価格（予測対象）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="salespriceの分布"&gt;SalesPriceの分布&lt;/h3&gt;
&lt;p&gt;平均は18万ドルほどだった。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/price.png"
width="1026"
height="824"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/price_hu_5b3255aafcaa08dc.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/price_hu_afbd494676fe5df2.png 1024w"
loading="lazy"
alt="SalePriceの分布"
class="gallery-image"
data-flex-grow="124"
data-flex-basis="298px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;describe()&lt;/code&gt;の結果は以下。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;count 1460.000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mean 180921.195890
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;std 79442.502883
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;min 34900.000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;25% 129975.000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;50% 163000.000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;75% 214000.000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;max 755000.000000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="前処理"&gt;前処理&lt;/h2&gt;
&lt;p&gt;ここでは実務上必要になる前処理を補足しておく。&lt;/p&gt;
&lt;h3 id="数値だがカテゴリとして扱うべき列"&gt;数値だがカテゴリとして扱うべき列&lt;/h3&gt;
&lt;p&gt;数値として格納されているが、大小関係に意味がない列は、そのままモデルに渡すと誤った大小関係を学習してしまう。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MSSubClass&lt;/code&gt;（住居種類コード）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;YrSold&lt;/code&gt;（売却年）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MoSold&lt;/code&gt;（売却月）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは、いずれも数値だが「値が大きい方が良い」という意味を持たないため、文字列（カテゴリ）に変換してから扱う&lt;/p&gt;
&lt;h3 id="one-hot-encoding"&gt;One-Hot Encoding&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;カテゴリ変数を、カテゴリごとに0/1の列に展開する基本的なエンコーディング手法&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pd.get_dummies()&lt;/code&gt;で実行できる&lt;/li&gt;
&lt;li&gt;前述のターゲットエンコーディングと異なりリークの心配はないが、カテゴリ数が多い変数では列数が急増する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="外れ値の除去"&gt;外れ値の除去&lt;/h3&gt;
&lt;p&gt;PCAによる外れ値の「検出」（後述）と異なり、実際に学習データから取り除くかどうかの判断。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;極端に価格が高い物件&lt;/li&gt;
&lt;li&gt;極端に古い物件&lt;/li&gt;
&lt;li&gt;極端に敷地が広い物件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは、モデルの学習を歪める要因になりうるため、除去を検討する。&lt;/p&gt;
&lt;p&gt;ただし、何をもって「極端」とするかは恣意性が伴うため、除去の基準を明示し、検証データでの効果も確認するのが望ましい。&lt;/p&gt;
&lt;h3 id="目的変数の対数変換"&gt;目的変数の対数変換&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;SalePrice&lt;/code&gt;のような金額は、少数の高額物件が平均を押し上げる、右に裾を引く分布になりやすい。&lt;/p&gt;
&lt;p&gt;そこで、対数変換を施すことで、分布を正規分布に近づけられ、多くの回帰モデルが前提とする「誤差が正規分布に従う」という条件に適合しやすくなる。&lt;/p&gt;
$$
y' = \log(1 + y)
$$&lt;p&gt;モデルの予測値は対数スケールになるため、実際の価格に戻すには指数変換（$y = e^{y'} - 1$）を忘れずに行う必要がある。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log.png"
width="1101"
height="393"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log_hu_3decb66740f02283.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log_hu_5e71edd7a6ad3696.png 1024w"
loading="lazy"
alt="対数変換"
class="gallery-image"
data-flex-grow="280"
data-flex-basis="672px"
&gt;&lt;/p&gt;
&lt;h3 id="yeo-johnson変換y-j変換"&gt;Yeo-Johnson変換（Y-J変換）&lt;/h3&gt;
&lt;p&gt;対数変換をより一般化したYeo-Johnson変換（Y-J変換）を用いる方法もある。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log2.png"
width="936"
height="391"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log2_hu_e9eeefe1ffad8e4b.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/log2_hu_c4bbbd148c4eee08.png 1024w"
loading="lazy"
alt="Y-J変換"
class="gallery-image"
data-flex-grow="239"
data-flex-basis="574px"
&gt;&lt;/p&gt;
&lt;h2 id="相互情報量mutual-information"&gt;相互情報量（Mutual Information）&lt;/h2&gt;
&lt;h3 id="相互情報量とは"&gt;相互情報量とは&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2つの変数がどれだけ情報を共有しているかを測る指標&lt;/li&gt;
&lt;li&gt;以下の式で定義される&lt;/li&gt;
&lt;/ul&gt;
$$
I(X;Y) = \sum_{x,y} p(x,y) \log \frac{p(x,y)}{p(x)p(y)}
$$&lt;p&gt;意味：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;相関係数と異なり、線形関係に限らずどんな種類の関係も検出できる&lt;/li&gt;
&lt;li&gt;0以上の値を取り、0なら独立、値が大きいほど強い依存関係を示す&lt;/li&gt;
&lt;li&gt;$p(x,y) = p(x)p(y)$なら独立した事象なので、xとyに関係性はない&lt;/li&gt;
&lt;li&gt;すると、$log(1)=0$となり、その項目はMIが0になる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="miの計算例離散変数"&gt;MIの計算例（離散変数）&lt;/h3&gt;
&lt;p&gt;分かりやすいように、住宅の広さを「Small／Large」、価格を「Low／High」に分類したとする。&lt;/p&gt;
&lt;p&gt;離散変数の場合なので、件数を数える。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th style="text-align: right"&gt;価格 Low&lt;/th&gt;
&lt;th style="text-align: right"&gt;価格 High&lt;/th&gt;
&lt;th style="text-align: right"&gt;合計&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td style="text-align: right"&gt;40&lt;/td&gt;
&lt;td style="text-align: right"&gt;10&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td style="text-align: right"&gt;10&lt;/td&gt;
&lt;td style="text-align: right"&gt;40&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合計&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;td style="text-align: right"&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;データが100件なので、同時確率は件数を100で割れば求まる。&lt;/p&gt;
$$
p(\mathrm{Small}, \mathrm{Low}) = \frac{40}{100} = 0.4
$$&lt;p&gt;周辺確率は、行または列の合計から求める。&lt;/p&gt;
$$
p(\mathrm{Small}) = \frac{50}{100} = 0.5
$$$$
p(\mathrm{Low}) = \frac{50}{100} = 0.5
$$&lt;p&gt;したがって、「SmallかつLow」の組み合わせが相互情報量に与える項は、次のようになる。&lt;/p&gt;
$$
0.4 \log \left(
\frac{0.4}{0.5 \times 0.5}
\right) = 0.4\log(1.6)
$$&lt;p&gt;4つの組み合わせをすべて足すと、自然対数を使った場合の相互情報量は次のようになる。&lt;/p&gt;
$$
\begin{aligned}
I(X;Y) &amp;= 2\left(
0.4\log\frac{0.4}{0.25}
\right)
+
2\left(
0.1\log\frac{0.1}{0.25}
\right) \\
&amp;\approx 0.193
\end{aligned}
$$&lt;p&gt;単位は、自然対数を使う場合は&lt;code&gt;nat&lt;/code&gt;、底2の対数を使う場合は&lt;code&gt;bit&lt;/code&gt;となる。&lt;/p&gt;
&lt;p&gt;一方、完全に独立している場合は次のようになる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th style="text-align: right"&gt;価格 Low&lt;/th&gt;
&lt;th style="text-align: right"&gt;価格 High&lt;/th&gt;
&lt;th style="text-align: right"&gt;合計&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td style="text-align: right"&gt;25&lt;/td&gt;
&lt;td style="text-align: right"&gt;25&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td style="text-align: right"&gt;25&lt;/td&gt;
&lt;td style="text-align: right"&gt;25&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合計&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;td style="text-align: right"&gt;50&lt;/td&gt;
&lt;td style="text-align: right"&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;この場合、すべての組み合わせにおいて、同時確率は周辺確率の積と等しくなる。&lt;/p&gt;
$$
p(x,y) = p(x)p(y) = 0.25
$$&lt;p&gt;したがって、対数部分は次のようになる。&lt;/p&gt;
$$
\log
\left(
\frac{p(x,y)}{p(x)p(y)}
\right) = \log
\left(
\frac{0.25}{0.25}
\right) = \log(1) = 0
$$&lt;p&gt;すべての組み合わせについて値が0になるため、相互情報量も0。&lt;/p&gt;
$$
I(X;Y)=0
$$&lt;h3 id="特徴量選定への応用"&gt;特徴量選定への応用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Amesデータセットには78個の特徴量があり、すべてを一度に検討するのは非現実的&lt;/li&gt;
&lt;li&gt;各特徴量とターゲット（&lt;code&gt;SalePrice&lt;/code&gt;）との相互情報量スコアを計算し、上位・下位を確認することで、開発に値する特徴量の当たりをつけられる&lt;/li&gt;
&lt;li&gt;上位に来る特徴量には、立地・広さ・品質といったテーマが繰り返し現れ、住宅の価値を左右する直感とも一致していた&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="交互作用の発見"&gt;交互作用の発見&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;単体の相互情報量スコアが低い特徴量でも、他の特徴量との組み合わせで意味を持つことがある&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BldgType&lt;/code&gt;（住居の構造種別）はそれ単体ではMIスコアが低かったが、&lt;code&gt;GrLivArea&lt;/code&gt;（地上の居住面積）との関係を見ると、カテゴリごとに傾向線の傾きが大きく異なっていた&lt;/li&gt;
&lt;li&gt;このように、カテゴリ別に見た時の傾向線の違いが、交互作用が存在することのサイン&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特徴量の作成"&gt;特徴量の作成&lt;/h2&gt;
&lt;p&gt;MIスコアや交互作用の分析で見込みのある特徴量が分かったら、実際に新しい特徴量を作成していく。&lt;/p&gt;
&lt;h3 id="数学的な変換"&gt;数学的な変換&lt;/h3&gt;
&lt;p&gt;同じ単位（面積など）を持つ特徴量同士は、比率や合計で組み合わせやすい。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LivLotRatio&lt;/code&gt;（居住面積÷敷地面積の比率）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Spaciousness&lt;/code&gt;（1階・2階の床面積の合計を部屋数で割った値）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TotalOutsideSF&lt;/code&gt;（各種屋外スペースの合計）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="カテゴリ変数との交互作用"&gt;カテゴリ変数との交互作用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;連続値の特徴量とカテゴリ変数の間に交互作用がある場合、カテゴリをOne-Hotエンコードしてから連続値に掛け合わせることで、交互作用を明示的な特徴量にできる。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;X_new = pd.get_dummies(df.Categorical, prefix=&amp;#34;Cat&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;X_new = X_new.mul(df.Continuous, axis=0)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="カウント特徴量"&gt;カウント特徴量&lt;/h3&gt;
&lt;p&gt;複数の関連する二値・数値項目のうち「いくつが条件を満たすか」を数える特徴量。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;屋外スペースの各種類（ウッドデッキ、ポーチなど）のうち、面積が0より大きいものの個数を数えた&lt;code&gt;PorchTypes&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="カテゴリの分解"&gt;カテゴリの分解&lt;/h3&gt;
&lt;p&gt;1つのカテゴリ変数が、実は複数の情報を含んでいることがある。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MSSubClass&lt;/code&gt;は「住居の種類」を表すが、文字列の最初の単語だけを取り出すことで、より大まかな分類を新しい特徴量として抽出できる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="グループ集計特徴量"&gt;グループ集計特徴量&lt;/h3&gt;
&lt;p&gt;ある特徴量の値を、別のカテゴリでグループ化した集計値（平均・中央値など）と組み合わせる。&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;各住宅の&lt;code&gt;GrLivArea&lt;/code&gt;を、その住宅が属する&lt;code&gt;Neighborhood&lt;/code&gt;ごとの中央値と比較できるようにした&lt;code&gt;MedNhbdArea&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;住宅の価値は、近隣の相場と比べてどうかという相対的な情報も持つため、こうした集計特徴量が有効になる。&lt;/p&gt;
&lt;h2 id="k-meansクラスタリング"&gt;K-meansクラスタリング&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/kmeans.png"
width="700"
height="296"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/kmeans_hu_c4e9052002a8b4a7.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/kmeans_hu_6043ad71801c3aa9.png 1024w"
loading="lazy"
alt="K-means"
class="gallery-image"
data-flex-grow="236"
data-flex-basis="567px"
&gt;&lt;/p&gt;
&lt;h3 id="k-meansのスケーリングの注意点"&gt;K-Meansのスケーリングの注意点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;k-meansは距離ベースのアルゴリズムのため、スケールの異なる特徴量をそのまま使うと、値の大きい特徴量に結果が引っ張られる&lt;/li&gt;
&lt;li&gt;緯度・経度のように、単位が揃っていて直接比較可能な特徴量は再スケーリング不要な場合が多い&lt;/li&gt;
&lt;li&gt;敷地面積と居住面積のように単位は同じでもスケールが大きく異なる特徴量や、ドア数と馬力のように単位そのものが異なる特徴量は、再スケーリングを検討する必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="クラスタリングによる特徴の作成"&gt;クラスタリングによる特徴の作成&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;クラスタラベル特徴量
&lt;ul&gt;
&lt;li&gt;敷地面積・地下室面積・1階/2階床面積・居住面積などの空間的な特徴量群にk-meansを適用し、各住宅が属するクラスタ番号をカテゴリ特徴量として追加する&lt;/li&gt;
&lt;li&gt;複雑な空間的関係を、単純なラベル1つに圧縮できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;クラスタ距離特徴量
&lt;ul&gt;
&lt;li&gt;クラスタ番号というカテゴリだけでなく、各住宅から全クラスタ中心までの距離を、それぞれ連続値の特徴量として使うこともできる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fit_predict&lt;/code&gt;の代わりに&lt;code&gt;fit_transform&lt;/code&gt;を使うことで、距離特徴量が得られる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="主成分分析pca"&gt;主成分分析（PCA）&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/pca.png"
width="499"
height="375"
srcset="https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/pca_hu_2fcbfd6371734ec4.png 480w, https://www.m1ke.org/p/%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E6%89%8B%E6%B3%95/pca_hu_39de13399fce5f49.png 1024w"
loading="lazy"
alt="PCA"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="319px"
&gt;&lt;/p&gt;
&lt;h3 id="ローディング主成分負荷量"&gt;ローディング（主成分負荷量）&lt;/h3&gt;
&lt;h4 id="ローディングとは"&gt;ローディングとは&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;PCAのローディングとは、各主成分が元の特徴量をどのような重みで組み合わせたものかを示す係数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば、標準化した特徴量を使って第1主成分が次のように表されたとする。&lt;/p&gt;
$$
PC1 = \\
0.55 \times \mathrm{GrLivArea} + 0.50 \times \mathrm{FirstFlrSF} + 0.48 \times \mathrm{TotalBsmtSF} - 0.10 \times \mathrm{YearBuilt}
$$&lt;ul&gt;
&lt;li&gt;この係数（&lt;code&gt;0.55、0.50、0.48、-0.10&lt;/code&gt;）がローディング&lt;/li&gt;
&lt;li&gt;この場合、PC1は主に床面積系の特徴量から構成されているため、「住宅の大きさ」を表す軸だと解釈できる&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ローディングと主成分スコアの違い"&gt;ローディングと主成分スコアの違い&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用語&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;th&gt;対象&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ローディング&lt;/td&gt;
&lt;td&gt;主成分を作る各特徴量の係数&lt;/td&gt;
&lt;td&gt;特徴量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主成分スコア&lt;/td&gt;
&lt;td&gt;各データを主成分軸に投影した値&lt;/td&gt;
&lt;td&gt;各住宅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;寄与率&lt;/td&gt;
&lt;td&gt;主成分がデータ全体の分散を説明する割合&lt;/td&gt;
&lt;td&gt;主成分&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;たとえば、住宅Aの標準化後の値が、以下だった時、&lt;/p&gt;
$$
\mathrm{GrLivArea}=1.2 \\
\mathrm{FirstFlrSF}=0.8
$$&lt;p&gt;PC1が以下だったら、&lt;/p&gt;
$$
PC1 = 0.6 \times \mathrm{GrLivArea} + 0.5 \times \mathrm{FirstFlrSF}
$$&lt;p&gt;住宅AのPC1スコアは、以下になる。&lt;/p&gt;
$$
0.6 \times 1.2 + 0.5 \times 0.8 = 1.12
$$&lt;p&gt;ここで、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0.6と0.5：ローディング&lt;/li&gt;
&lt;li&gt;1.12：住宅Aの主成分スコア&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ローディングの解釈"&gt;ローディングの解釈&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;互いに相関の強い特徴量群にPCAを適用すると、各主成分がどの特徴量の組み合わせに強く反応しているか（ローディング）を確認できる&lt;/li&gt;
&lt;li&gt;ローディングの符号・大きさのパターンから、その主成分が何らかの対比を捉えていると解釈できる&lt;/li&gt;
&lt;li&gt;例えば「新しくて質は高いが広くはない」対「古いが広い」のような対比&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="主成分を特徴量として使う"&gt;主成分を特徴量として使う&lt;/h3&gt;
&lt;p&gt;ローディングから着想を得て新しい特徴量を作る方法と、主成分の値そのものを特徴量としてモデルに追加する方法の両方がありうる。&lt;/p&gt;
&lt;p&gt;2つ以上の特徴量をMixする例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同じ方向に強く寄与している特徴量 → 合計や平均&lt;/li&gt;
&lt;li&gt;反対方向に寄与している特徴量 → 差や比率&lt;/li&gt;
&lt;li&gt;共に重要な特徴量 → 積による交互作用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="外れ値検出への応用"&gt;外れ値検出への応用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PCAは、個々の特徴量を見ただけでは分からない「変則的な変動」を検出できる&lt;/li&gt;
&lt;li&gt;例えば、小さい住宅であること自体や、地下室が大きいこと自体は珍しくないが、「小さいのに地下室だけ異常に大きい」という組み合わせは珍しい&lt;/li&gt;
&lt;li&gt;主成分の分布で極端な値を持つデータ点を確認することで、こうした組み合わせ的な外れ値を見つけられる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ターゲットエンコーディング"&gt;ターゲットエンコーディング&lt;/h2&gt;
&lt;h3 id="ターゲットエンコーディングとは"&gt;ターゲットエンコーディングとは&lt;/h3&gt;
&lt;p&gt;Kaggleでよく使われるターゲットエンコーディングは、カテゴリ名を「そのカテゴリでは、目的変数が平均的にどのくらいになるか」という数値に変換する方法。&lt;/p&gt;
&lt;p&gt;仮に次のデータが得られたとする&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Neighborhood&lt;/th&gt;
&lt;th style="text-align: right"&gt;件数&lt;/th&gt;
&lt;th style="text-align: right"&gt;平均販売価格&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NAmes（エイムズ北部）&lt;/td&gt;
&lt;td style="text-align: right"&gt;200件&lt;/td&gt;
&lt;td style="text-align: right"&gt;150,000ドル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NridgHt（ノースリッジ・ハイツ）&lt;/td&gt;
&lt;td style="text-align: right"&gt;70件&lt;/td&gt;
&lt;td style="text-align: right"&gt;310,000ドル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TinyArea（架空の地区）&lt;/td&gt;
&lt;td style="text-align: right"&gt;2件&lt;/td&gt;
&lt;td style="text-align: right"&gt;400,000ドル&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;単純なターゲットエンコーディングでは次のように置き換える。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAmes → 150,000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NridgHt → 310,000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TinyArea → 400,000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これにより、文字列だったNeighborhoodを価格と関係する数値としてモデルに渡せる。&lt;/p&gt;
&lt;p&gt;つまり、カテゴリカル変数を、そのカテゴリにおけるターゲットの平均値に置き換える手法。&lt;/p&gt;
&lt;h3 id="m推定平滑化"&gt;M推定平滑化&lt;/h3&gt;
&lt;p&gt;カテゴリの出現回数が少ないと、平均値の推定が不安定になるため、M推定（M-estimate）という平滑化を行う。&lt;/p&gt;
$$
\text{encoding} = \frac{n \cdot \bar{y}_{\text{category}} + m \cdot \bar{y}_{\text{overall}}}{n + m}
$$&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;$\bar{y}_{\text{category}}$: そのカテゴリに属する住宅のSalePrice平均&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$\bar{y}_{\text{overall}}$: 学習データ全体のSalePrice平均&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$n$: はそのカテゴリの出現回数、$m$は平滑化の強さを決めるパラメータ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;前述の例だと、TinyArea（架空の地区）は2件しかなかったので、これが対象になる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;過去の正解から得た統計情報を、将来の予測に使う方法ではあるが、カンニングに少し近い&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="リークを防ぐ必要性"&gt;リークを防ぐ必要性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;前述の通り、$\bar{y}_{\text{category}}$などは住宅価格をベースにしている&lt;/li&gt;
&lt;li&gt;そのため、ターゲットの情報がエンコーディングを経由してモデルにリークしてしまう&lt;/li&gt;
&lt;li&gt;なぜなら、エンコーディングに使う平均値の計算に、モデルの学習に使うのと同じデータを使っているから&lt;/li&gt;
&lt;li&gt;これを避けるため、エンコーディングを学習させるデータと、実際にモデルを学習させるデータは分割しておく必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="リークによる過学習の実例"&gt;リークによる過学習の実例&lt;/h3&gt;
&lt;p&gt;ここに、&lt;code&gt;SalePrice&lt;/code&gt;とは本来何の関係もないはずの、単なる連番のカウント特徴量（&lt;code&gt;Count&lt;/code&gt;）を、あえてエンコーディングと同じデータ上でM推定平滑化で平均エンコードしてみる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: right"&gt;行&lt;/th&gt;
&lt;th style="text-align: right"&gt;&lt;code&gt;Count&lt;/code&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;&lt;code&gt;SalePrice&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;1&lt;/td&gt;
&lt;td style="text-align: right"&gt;0&lt;/td&gt;
&lt;td style="text-align: right"&gt;120,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;1&lt;/td&gt;
&lt;td style="text-align: right"&gt;250,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;3&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;180,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;4&lt;/td&gt;
&lt;td style="text-align: right"&gt;3&lt;/td&gt;
&lt;td style="text-align: right"&gt;310,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;この上で計算すると、ほぼ完璧なスコアが出てしまう&lt;/li&gt;
&lt;li&gt;理由は、連番のような一意性の高い特徴量を平均エンコードすると、各カテゴリの出現回数が1に近くなり、エンコードされた値がほぼターゲットの値そのものになってしまうため&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kaggle Learnのコース自体は前処理済みのデータを前提にしているため、カテゴリ変換・One-Hot Encoding・外れ値除去・目的変数の対数変換といった一般的な前処理は別途必要になる&lt;/li&gt;
&lt;li&gt;相互情報量は、特徴量の候補を絞り込む出発点として使えるが、単体のスコアだけでは交互作用を見逃す&lt;/li&gt;
&lt;li&gt;特徴量の作成は、数学的な変換・カテゴリとの交互作用・カウント・分解・グループ集計など、いくつかの型に分類できる&lt;/li&gt;
&lt;li&gt;K-meansやPCAのような教師なし学習の手法も、クラスタラベルや距離、主成分といった形で特徴量作成に転用できる&lt;/li&gt;
&lt;li&gt;ターゲットエンコーディングは強力だが、リークによる過学習のリスクが大きく、holdoutデータでの学習と平滑化パラメータの調整が欠かせない&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.kaggle.com/learn/feature-engineering" target="_blank" rel="noopener"
&gt;Feature Engineering - Kaggle Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Duboue, P. (2020). &amp;ldquo;The Art of Feature Engineering&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Heaton, J. &amp;ldquo;An Empirical Analysis of Feature Engineering for Predictive Modeling&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Zheng, A. &amp;amp; Casari, A. (2018). &amp;ldquo;Feature Engineering for Machine Learning&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Kuhn, M. &amp;amp; Johnson, K. (2019). &amp;ldquo;Feature Engineering and Selection&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://hacarus.github.io/interpretable-ml-book-ja/index.html" target="_blank" rel="noopener"
&gt;Interpretable Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/kizataka/items/c7e0b3cee294a33276f5#%E6%95%B0%E5%80%A4%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E5%A4%89%E6%8F%9B" target="_blank" rel="noopener"
&gt;【Kaggle】House PricesをLightGBMで分析 #Python - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.imagazine.co.jp/%E4%BB%8A%E3%81%82%E3%82%89%E3%81%9F%E3%82%81%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%EF%BD%9E%E4%BA%88/" target="_blank" rel="noopener"
&gt;今あらためて考える特徴量エンジニアリング　～予測精度をあと一歩改善するテクニック - アイマガジン｜i Magazine｜IS magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/@raghavan99o/principal-component-analysis-pca-explained-and-implemented-eeab7cb73b72" target="_blank" rel="noopener"
&gt;Principal component analysis (PCA): Explained and implemented | by Raghavan | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.geeksforgeeks.org/machine-learning/what-is-feature-engineering/" target="_blank" rel="noopener"
&gt;Feature Engineering - GeeksforGeeks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/solegalli/feature-engineering-for-machine-learning" target="_blank" rel="noopener"
&gt;solegalli/feature-engineering-for-machine-learning: Code repository for the online course Feature Engineering for Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>