この記事では、カテゴリデータについて、その意味や、分析における数値変換のメリット・代表的な手法などを具体例をもとに解説します。
<目次>
カテゴリデータとは何か
「カテゴリ」とは、分類上の区分や種類を指す言葉であり、「カテゴリデータ」は、区別や分類を表す目的のみに使用され、数値の大小関係には意味を持たないデータを指します。質的データの一つに分類され、代表的な例には、性別、血液型、都道府県や商品の種類などを数値で表したデータが挙げられます。
カテゴリデータには以下のような特徴があります。
◦取り得る値の数が有限である
◦度数カウントのみ可能で、大小比較や加減算などの計算は行えない
カテゴリデータは多くのケースで頻繁に登場し、データの分類やグルーピングによる分析を可能にするため、カテゴリデータへの対応はデータ分析において非常に重要です。
一方、カテゴリデータはそのままではデータ分析に適さないケースが多く、特に統計分析や機械学習においてはカテゴリデータを数値などに変換する処理が必要となります。以下では、カテゴリデータの数値変換について、そのメリットや実施の際の注意点、数値変換の代表的な手法について解説します。
カテゴリデータの数値変換
メリット①:データサイズ削減と処理の高速化
カテゴリデータを数値に変換するメリットの一つは、データサイズ削減と処理の高速化です。カテゴリデータが文字列としてデータベースに保持されていることは良くあります。例えば、試験の科目を「国語」「数学」「理科」「社会」というような区分で保持しているケースです。
この場合、この文字列による区分について、「国語」を「1」、「数学」を「2」、「理科」を「3」、「社会」を「4」という数値に置き替えることで、データサイズを大きく削減できるとともに、カテゴリに応じた集約や結合などの処理を行う際の処理速度が高速化されます。これらは、特に大規模なデータに対して分析を行う際に重要となります。
メリット②:カテゴリの順序を表現できる
2つ目のメリットは、文字列で保持されたカテゴリデータを数値に変換することで、カテゴリに順序の情報を持たせることができることです。例えば、「10代」「20代」「30代」といった年齢区分を表す文字列のデータを数値に変換することで、年齢区分に順序を持たせることができるようなります。これは、分析結果をソートして表示する際や、各カテゴリ間の差分を計算する際などに重宝します。
なお、冒頭に記載したように本来カテゴリデータは順序や数値の大小の情報を持たないため、このような順序の情報を持たせたデータは、厳密にはカテゴリデータを同じ質的データである「順位データ」に分類されます。カテゴリデータを順位データに変換することで、度数カウントに加えて、値の大小比較などを行うことが可能となります。
数値変換に伴う注意点
カテゴリデータの数値変換には上記のようなメリットがありますが、特に機械学習を適用する場合など分析の目的や手法によっては、カテゴリデータに順序の情報を持たせることが適切ではないケースも存在します。例えば47都道府県を表すカテゴリデータを0から46などの数値に変換した場合、本来順序のないカテゴリに不要な順序を持たせることになり、分析結果に悪影響を与える可能性があります。
年齢・性別・住所・購入履歴・閲覧頻度などの属性データをもとに、あるイベントに対するECサイト会員の反応の有無を、ロジスティック回帰などをもとに予測する機械学習モデルを構築するケースを考えます。
この時、会員住所の都道府県を0~46の数値で表したデータに変換し、それをモデルの学習に使用すると、本来はこのデータの数値の大小には意味がないにも関わらず、この数値の大きさがイベントへの反応の有無に影響を与えるという誤った学習をしてしまう可能性があります。
同様のことは、カテゴリデータがもともと数値で表されているケースにも当てはまります。仮に4つの血液型を表すカテゴリデータが、1~4の数字で保持されていたとしても、それは分類を表すのみで数値の大小は意味を持たないため、これをそのまま統計分析モデルや機械学習で用いることは適切ではありません。
これらのケースでは、後述するone-hotエンコーディングなど、通常の数値表現とは異なる形にカテゴリデータを変換した上で、機械学習モデルの構築などを行う必要があります。
カテゴリデータをどのような形に変換することが望ましいかは、カテゴリデータの性質や分析の目的・手法などをもとに、それぞれのケースに応じて判断することが必要となります。
代表的な数値変換手法
①ラベルエンコーディング
ラベルエンコーディングは、カテゴリの各水準を整数に変換し、置き換える方法です。先ほどのような、試験科目を「国語」「数学」「理科」「社会」の4区分で保持しているデータを、0から3までの数値で単純に置き換えます。置き換えの順序には、各カテゴリを文字列として並べた順番が割り当てられることが一般的です。
ラベルエンコーディングと同様に整数に置き換えるものに、序数エンコーディングがありますが、序数エンコーディングはカテゴリにもともと順序があるもの(順位データ)に対して使用され、本来の順序に応じた変換が行われます。
もともと順序を持たないカテゴリデータに対してこれらのエンコーディングを用いると、本来存在しないはずの順序情報をデータに持たせることになるため、適切ではありません。ただし、機械学習の決定木系のモデルでは、分岐によって特定の水準のみを予測に反映することが可能なため影響が少なく、ラベルエンコーディングが広く使用されています。
ラベルエンコーディングの実装は、Pythonではscikit-learnのLaberEncoderを使用して行うことができます。設定方法の詳細については、LaberEncoderレファレンスページをご覧ください。
②one-hotエンコーディング
one-hotエンコーディングは、カテゴリの各水準に対して、その水準に該当するか否かを「0または1」の2値で表す変数(これをダミー変数と呼びます)を作ります。仮にカテゴリの水準が4個の場合、統計分析では3個(説明変数間に完全な相関関係がある状態を表す、「完全多重共線性」を回避するため)、機械学習ではそのまま4個の二値変数が新たに作成されます。
例えば、データ上で「最終学歴」を表す属性が「中学卒:1、高校卒:2、専門学校/短大卒:3、大学卒以上:4」として登録されている場合、これを「属性1:高校卒(0または1)」「属性2:専門学校/短大卒(0または1)」「属性3:大学卒以上(0または1)」の3つの属性に分けることで、各サンプルはこのどれか一つに「1」が付く(または全て0となる)形で表現されます。
カテゴリの全ての水準を「0または1」のダミー変数に置き換えるone-hotエンコーディングは、ラベルエンコーディングなどでは生じてしまう順序の情報を持たず、カテゴリの順序が分析に影響を与えることを回避することがでるため、統計分析や機械学習において最も広く使用される手法です。
| 変換前 |
➡ |
D1 | D2 | D3 |
| 高校卒 | 1 | 0 | 0 | |
| 専門学校/短大卒 | 0 | 1 | 0 | |
| 大卒以上 | 0 | 0 | 1 | |
| 中学卒 | 0 | 0 | 0 |
one-hotエンコーディングの実装は、Pythonではscikit-learnのOneHotEncoderを使用して行うことができます。設定方法の詳細については、OneHotEncoderレファレンスページをご覧ください。
また、カテゴリデータをもとにダミー変数を作り、回帰モデルなどを作成する方法についての詳細は、以下のページをご覧ください。
ここまで、カテゴリデータについて、その意味や、分析における数値変換のメリット・代表的な手法などを解説しました。
当記事に関連するトピックについての詳細は、以下のページをご覧ください。
また、機械学習・データ分析一般に関する全ての記事は以下のページからご覧いただけます。
参考文献:
◦栗原伸一・丸山敦史 (2017)『統計学図鑑』オーム社
◦本橋智光・橋本秀太郎 (2024)『改定新版 前処理大全-SQL/Pandas/Polars実践テクニック-』技術評論社
◦◦Andreas C. Muller、Sarah Guido (2017)『Pythonではじめる機械学習―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎』O’Reilly Japan