---
title: データ サイエンスにおける特徴エンジニアリング - Team Data Science Process
description: 特徴エンジニアリングと、機械学習のデータ強化プロセスにおけるその役割について説明します。
services: machine-learning
author: marktab
manager: marktab
editor: marktab
ms.service: machine-learning
ms.subservice: team-data-science-process
ms.topic: conceptual
ms.date: 05/14/2020
ms.author: tdsp
ms.custom: seodec18, previous-author=deguhath, previous-ms.author=deguhath, contperfq4
ms.openlocfilehash: c31cf0e5c655f53e8838c92f5463d3a85c2f6f65
ms.sourcegitcommit: 0b80a5802343ea769a91f91a8cdbdf1b67a932d3
ms.translationtype: HT
ms.contentlocale: ja-JP
ms.lasthandoff: 05/25/2020
ms.locfileid: "83836823"
---
# <a name="feature-engineering-in-data-science"></a>データ サイエンスにおける特徴エンジニアリング

この記事では、特徴エンジニアリングと、機械学習のデータ強化におけるその役割について説明します。 [Azure Machine Learning Studio (classic)](../studio/what-is-ml-studio.md) の実験から引用された、わかりやす例から学びます。 

* **特徴エンジニアリング**:生データから新しい特徴を作成して、学習アルゴリズムの予測能力を向上させるプロセス。 エンジニアリングされた特徴は、元の特徴セットでは簡単にはわからない追加情報を取得する必要があります。
* **特徴選択**: トレーニング問題の次元を削減するために、特徴の主要なサブセットを選択するプロセス。

通常、最初に**特徴エンジニアリング**が追加の特徴を生成するために適用され、その後、無関係な特徴、重複した特徴、関連性の高い特徴を排除するために**特徴選択**が実行されます。

特徴エンジニアリングと選択は、Team Data Science Process (TDSP) の[モデリング ステージ](lifecycle-modeling.md)の一部です。 TDSP とデータ サイエンス ライフサイクルの詳細については、「[Team Data Science Process とは](overview.md)」を参照してください。

## <a name="what-is-feature-engineering"></a>特徴エンジニアリングとは

トレーニング データは、行と列から成るマトリックスで構成されています。 マトリックスの各行は、観測またはレコードです。 各行の列は、各レコードを表す特徴です。 実験計画で指定された特徴は、データ内のパターンを特徴付ける必要があります。

生のデータ フィールドの多くはモデルのトレーニングに直接使用できますが、多くの場合、強化されたトレーニング データ セット用に追加の (エンジニアリングされた) 特徴が作成される必要があります。

トレーニングを強化するためのエンジニアリングされた特徴により、データ内のパターンをより適切に識別する情報が提供されます。 ただし、このプロセスは芸術のようなものです。 正当な生産性の高い意思決定は、多くの場合、各分野の専門知識が必要です。

## <a name="example-1-add-temporal-features-for-a-regression-model"></a>例 1:回帰モデルに時間的な特徴を追加する

Azure Machine Learning Studio (classic) の[自転車レンタルの需要予測](https://gallery.azure.ai/Experiment/Regression-Demand-estimation-4)実験を使用して、回帰タスクの特徴をエンジニアリングする方法を見てみましょう。 この実験の目的は、特定の月、日、または時間における自転車レンタルの需要を予測することです。

### <a name="bike-rental-dataset"></a>自転車レンタルのデータセット

[自転車レンタル UCI データセット](http://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset/)は、米国の自転車シェア会社の実際のデータに基づいたものです。 2011 年と 2012 年の、1 日の特定の時間帯の自転車レンタルの数を表しています。 17,379 行、17 列が含まれています。

生の特徴セットには、気象条件 (温度 / 湿度 / 風速) やその日の種類 (休日 / 平日) が含まれます。 予測するフィールドはカウントです。これは、特定の時間帯の自転車レンタルを表しています。 カウントの範囲は 1 から 977 です。

### <a name="create-a-feature-engineering-experiment"></a>特徴エンジニアリング実験を作成する

トレーニング データに効果的な特徴を構築することを目標として、4 つの回帰モデルは同じアルゴリズムを使用して構築されましたが、トレーニング データセットはそれぞれ異なります。 次の 4 つのデータセットは同じ生の入力データを表しますが、特徴セットの数は増加しています。 これらの特徴は、次の 4 つのカテゴリに分類されます。

1. A = 予測日の天候 + 休日 + 平日 + 週末の各特徴
2. B = 過去 12 時間ごとにレンタルされた自転車の数
3. C = 過去 12 日ごとにレンタルされた自転車の数 (同じ時間帯)
4. D = 過去 12 週ごとにレンタルされた自転車の数 (同じ時間帯、同じ日)

元の生データに既に存在する特徴セット A のほかに、他の 3 つの特徴セットが特徴エンジニアリング プロセスによって作成されます。 特徴セット B では、直近の自転車の需要を収集します。 特徴セット C では、特定の時間帯の自転車の需要を収集します。 特徴セット D では、特定の曜日の特定の時間帯の自転車の需要を収集します。 この 4 つのトレーニング データセットは、それぞれ A、A+B、A+B+C、A+B+C+D の特徴セットを含んでいます。

### <a name="feature-engineering-using-studio-classic"></a>Studio (classic) を使用した特徴エンジニア リング

Studio (classic) の実験では、これら 4 つのトレーニング データセットは、前処理された入力データセットからの 4 つの分岐を使用して形成されます。 一番左の分岐を除いて、これらの各分岐には [R スクリプトの実行](https://msdn.microsoft.com/library/azure/30806023-392b-42e0-94d6-6b775a6e0fd5/)モジュールが含まれており、ここで生成された特徴 (特徴セット B、C、D) が構築され、インポートされたデータセットに追加されます。

次の図は、左の 2 番目の分岐にある特徴セット B の作成に使用される R スクリプトを示します。

![特徴を定義する](./media/create-features/addFeature-Rscripts.png)

### <a name="results"></a>結果

4 つのモデルのパフォーマンス結果の比較を次の表にまとめています。 

![結果の比較](./media/create-features/result1.png)

特徴 A+B+C よって最適な結果が表示されます。 トレーニング データに特徴セットを追加すると、エラー率は低下します。 これにより、特徴セット B、C は、関連する追加情報を回帰タスクに提供するという推測が検証されます。 ただし、D の特徴を追加しても、エラー率はそれ以上は低下しないようです。

## <a name="example-2-create-features-for-text-mining"></a><a name="example2"></a> 例 2: テキスト マイニング用の特徴を作成する

特徴エンジニアリングは、ドキュメントの分類や感情分析などのテキスト マイニングに関連するタスクに広く適用されています。 通常、未加工のテキストの各部分が入力データとして機能するため、出現する単語や語句の頻度を含む特徴を作成するために特徴エンジニアリング プロセスが必要になります。

### <a name="feature-hashing"></a>特徴ハッシュ

このタスクを実現するには、"[特徴ハッシュ](https://docs.microsoft.com/azure/machine-learning/studio-module-reference/feature-hashing)" と呼ばれる手法を適用して、任意のテキストの特徴を効率的にインデックスに変えます。 各テキストの特徴 (単語や語句) を特定のインデックスに関連付ける代わりに、このメソッドではハッシュ関数が特徴に適用され、そのハッシュ値が直接インデックスとして使用されます。

Studio (classic) には、これらの単語や語句の特徴を便利に作成できる[特徴ハッシュ](https://docs.microsoft.com/azure/machine-learning/studio-module-reference/feature-hashing) モジュールがあります。 このモジュールを使用する例を次に示します。 入力データセットには、1 ～ 5 の書籍の評価と実際のレビュー内容の 2 つ列が含まれています。 このモジュールの目的は、特定の書籍レビュー内の対応する単語や語句の出現頻度を示す一連の新しい特徴を取得することです。 このモジュールを使用するには、次の手順を実行します。

* まず、入力テキストが含まれている列を選択します (この例では "Col2")。
* 次に、"Hashing bitsize" を 8 に設定します。これにより、2 ^8 = 256 の特徴が作成されます。 すべてのテキストの単語や語句は、256 のインデックスにハッシュされます。 "Hashing bitsize" パラメーターの範囲は 1 ～ 31 です。 単語や語句は、大きな数値を設定すれば、同じインデックスにハッシュされる可能性はほとんどありません。
* 最後に、"N-grams" パラメーターを 2 に設定します。 この値は、入力テキストからユニグラム (単語ごとの特徴) とバイグラム (隣接する2 単語ごとの特徴) の出現頻度を取得します。 "N-grams" パラメーターの範囲は 0 ～ 10 で、特徴に含まれる最大の連続単語数を示します。  

![”特徴ハッシュ” モジュール](./media/create-features/feature-Hashing1.png)

次の図は、これらの新しい特徴の外観を示しています。

![”特徴ハッシュ” の例](./media/create-features/feature-Hashing2.png)

## <a name="conclusion"></a>まとめ
エンジニアリングされ、選択された特徴は、データに含まれるキー情報の抽出を試みるトレーニング プロセスの効率を高めます。 また、入力データを正確に分類して、関心のある結果をより確実に予測するために、これらのモデルのパワーを向上させます。

特徴エンジニアリングと特徴選択は、学習を計算的により扱いやすくするために組み合わせることもできます。 これは、強化した後、モデルの調整やトレーニングに必要な特徴の数を減らすことによって行われます。 数学的には、選択される特徴は、データのパターンを説明し、正常に結果を予測する独立変数の最小セットです。

常に特徴エンジニアリングや特徴選択を実行する必要があるわけではありません。 データ、選択されているアルゴリズム、および実験の目的によって異なります。

## <a name="next-steps"></a>次のステップ

特定の環境でデータの特徴を作成するには、次の記事を参照してください。

* [SQL Server のデータの特徴を作成する](create-features-sql-server.md)
* [Hive クエリを使用して Hadoop クラスターのデータの特徴を作成する](create-features-hive.md)