ダミー変数とは|その意味、使用ケースと作成方法

この記事では、統計分析や機械学習等で使用される「ダミー変数」について、その意味や使用ケース、作成の方法と作成に使えるライブラリを、具体例をもとに解説します。

ダミー変数とは何か

「ダミー変数」とは、変数のうち、「0」または「1」の値のみを取るものを指します。

ダミー変数 (dummy variable)
「0」または「1」の2つの値のみを取る変数

ダミー変数は、2つの値で区別することができるものであれば、どのような対象にも用いることができます。これには例えば、

  • 男性か女性か(男性なら0、女性なら1)
  • 卒業後に就職するか、進学するか(就職するなら0、進学するなら1)
  • 都市部に住んでいるか、地方に住んでいるか(都市部なら0、地方なら1)

などのように、「Aか、Bか」という形で「2つの属性のどちらに該当するか」を表現するために用いることができますが、その他にも、

  • 就業経験があるか、ないか(あれば1、なければ0)
  • 日本国籍を持っているか、持っていないか(持っていれば1、持っていなければ0)
  • 所得が500万円を超えるか、超えないか(超えていれば1、超えていなければ0)

というように、「Aか、Aではないか」という形で「ある属性に該当するか否か」を表現するために用いることもできます。特に後者の使用方法は、カテゴリデータのダミー変数化において広く用いられています。

いつダミー変数を使うのか

ダミー変数を使うことで、2つまたはそれ以上の数のグループ間の差異について統計的な検定や推定を行ったり、ダミー変数を特徴量として機械学習による学習・予測を行うことなどができるようになります。

以下では、代表的なダミー変数の使用ケースとして、①回帰分析におけるダミー変数、②カテゴリーデータのダミー変数化、について解説します。

①回帰分析におけるダミー変数

回帰分析におけるダミー変数の使用方法には、「切片ダミー」としての使用方法と、「傾きダミー」としての使用方法の2つがあります。

切片ダミー

回帰モデルに「切片ダミー」を用いることで、回帰線におけるグループ間の「切片」の違いを表現することができます。切片ダミーを含む回帰モデルは、以下のようになります。

切片ダミーを含む回帰モデルy = α + β1x + β2D + u 

例えばこれを、「y」を所得(目的変数)、「x」を就業年数(説明変数)とした回帰モデルとした場合、「D」は大卒以上の学歴があるか否かを表すダミー変数とすることができます(大卒以上が1、大卒未満が0)。

Dの係数β2が統計的に有意な場合、回帰線の切片が大卒以上か否かで異なると考えることができ、2つのグループに対してそれぞれ異なる切片を設定することで、より当てはまりの良い推定結果を得ることができます。

ダミー変数_切片ダミー

栗原・丸山(2017)を参考に、Intelligence In Society作成

傾きダミー

一方、回帰モデルに「傾きダミー」を含めることで、回帰線におけるグループ間の「傾き」の違いを表現することができます。先ほどの切片ダミーを含むモデルに、傾きダミーを追加した回帰モデルは以下のようになります。

傾きダミーを追加した回帰モデルy = α + β1x + β2D + β3Dx + u 

ここでは、大卒以上の学歴があるか否かを表すダミー変数「D」が、新たに「x」との交互作用項「Dx」として追加されています。

Dxの係数β3が統計的に有意な場合、回帰線の傾きが大卒以上か否かで異なると考えることができ、2つのグループに対してそれぞれ異なる傾きを設定することで、より当てはまりの良い推定結果を得ることができます。この例では結果として、切片ダミーと傾きダミーの両方を加えたモデルが、最も当てはまりの良い(R2スコアの高い)モデルとなっています。

ダミー変数_切片ダミー傾きダミー

栗原・丸山(2017)を参考に、Intelligence In Society作成

②カテゴリデータのダミー変数化

性別や血液型、都道府県、最終学歴など、ある属性に関する区別や分類を表すデータを「カテゴリデータ」と呼びます。カテゴリデータは、数値で表現されていたとしても、それは分類を表すのみで数値の大小は意味を持たないため、これをそのまま統計分析モデルや機械学習で用いることは適切ではありません。

そのため、カテゴリデータをダミー変数を用いて「0または1」の値を持つ複数の属性の組み合わせとして表現することで、統計分析モデル等で使用することが可能となります。

例えば、データ上で「最終学歴」を表す属性が「中学卒:1、高校卒:2、専門学校/短大卒:3、大学卒以上:4」として登録されている場合、これを「属性1:高校卒(0または1)」「属性2:専門学校/短大卒(0または1)」「属性3:大学卒以上(0または1)」の3つの属性に分けることで、各サンプルはこのどれか一つに「1」が付く(または全て0となる)形で表現することができます。

カテゴリデータをダミー変数化した回帰モデルは以下のようになります。

カテゴリをダミー化した回帰モデルy = α + β1x + β2D1 + β3D1x + β4D2 + β5D2x + β6D3 + β7D3x + u 

ここでは、3つのダミー変数(高校卒:D1、専門学校/短大卒:D2、大学卒以上:D3)が、それぞれ切片ダミーと傾きダミーに設定されています。また、「中学卒」の属性は「基準(ベース)」として3つのダミー変数がいずれも「0」となる形で表現されます。

なお、ここで「属性:中学卒」が存在しないのは、完全多重共線性(説明変数間に完全な相関関係がある状態)により推定が行えない事態を回避するためです。特に統計分析においては、カテゴリのうちの1つを除いてダミー変数化し、完全多重共線性の問題を回避することが必要となります。(機械学習では全てのカテゴリをダミー変数化することが一般的です。)

どのようにダミー変数を作るのか

ダミー変数の作り方

先の「y」を所得(目的変数)、「x」を就業年数(説明変数)とした例において、「最終学歴」を表すカテゴリデータをダミー変数化した場合、実際のダミー変数は以下のようになります。

ダミー変数_カテゴリデータ_1


D1、D2、D3はそれぞれ、「高校卒」「専門学校/短大卒」「大学卒以上」についての切片ダミー、D1x、D2x、D3xは傾きダミーに該当します。また、「中学卒」の属性は、すべてのダミー変数が「0」となるベースとして表現されます。

作成のためのライブラリ

ダミー変数の対象となる属性が複数存在する場合、それを手作業で作成することは非常に手間となります。そこで、データ分析の主要な言語では、ダミー変数の作成を支援するライブラリが用意されています。

なお、これらのライブラリでは上記の傾きダミーにあたるD1x、D2x、D3xは直接作成されません。傾きダミーは、分析を行う際のモデルの関数形(フォーミュラ)で指定したり、作成されたダミー変数とxの交互作用項を新たに作成することで対応します。

Rで使用できるライブラリ

Rでは、「fastDummies」というパッケージで、ダミー変数を作成することができます。

dummy_cols関数にDataFrameなどのデータセットを渡し、select_columns引数でダミー変数化する列を選択します。また、remove_first_dummy引数をTRUEにすることで、n-1個のダミー変数を残し、完全多重共線性を回避することができます。

library(fastDummies)

sample_df <- data.frame(
  y = c(400, 600, 550, 450),
  x = c(5, 13, 7, 10),
  z = c("高校卒", "専門学校/短大卒", "大学卒以上", "中学卒")
)

fastDummies::dummy_cols(
  sample_df,
  select_columns = c("z"),
  remove_first_dummy = TRUE,
  remove_selected_columns = TRUE
)

出力結果:
    y  x z_大学卒以上 z_専門学校/短大卒 z_高校卒
1 400  5            0                 0        1
2 600 13            0                 1        0
3 550  7            1                 0        0
4 450 10            0                 0        0

設定方法の詳細については、fastDummiesの公式ドキュメントをご覧ください。

Pythonで使用できるライブラリ

Pythonでは、「category_encoders」ライブラリの「OneHotEncoder」クラスを用いて、ダミー変数を作成することができます。

cols引数にダミー変数化する列を指定します。リスト型を渡すことで、複数の列を指定することができます。また、handle_unknown=”value”(デフォルト)とすることで、fit関数に渡したデータには存在しなかった新たなカテゴリ値を0に変換します。

import pandas as pd
from category_encoders.one_hot import OneHotEncoder

sample_df = pd.DataFrame({
  'y' : [400, 600, 550, 450],
  'x' : [5, 13, 7, 10],
  'z' : ["高校卒", "専門学校/短大卒", "大学卒以上", "中学卒"]
})

encoder = OneHotEncoder(
    cols="z",
    handle_unknown="value",
    use_cat_names=True
)
encoder.fit_transform(sample_df)


出力結果:
dex	y	x	z_高校卒 z_専門学校/短大卒 z_大学卒以上 z_中学卒
0	400	5	       1        	 0            0	       0
1	600	13	       0        	 1            0        0
2	550	7              0        	 0            1	       0
3	450	10	       0        	 0            0	       1

なお、ここでは「中学卒」も含めた全てのカテゴリがダミー変数化されています。

ここまで、統計分析や機械学習等で使用される「ダミー変数」について、その意味や使用ケース、作成の方法と作成に使えるライブラリを解説しました。

当記事に関連するトピックについての詳細は、以下のページをご覧ください。

また、データ分析一般・因果推論に関する全ての記事は以下のページからご覧いただけます。

参考文献:
◦栗原伸一・丸山敦史 (2017)『統計学図鑑』オーム社
◦西山慶彦・新谷元嗣・川口大司・奥井亮 (2019)『計量経済学』有斐閣
◦本橋智光・橋本秀太郎 (2024)『改定新版 前処理大全-SQL/Pandas/Polars実践テクニック-』技術評論社
◦Jacob Kaplan. (2025) “Package ‘fastDummies’” https://cran.r-project.org/web/packages/fastDummies/fastDummies.pdf (2026年3月25日最終閲覧)

関連記事