3.8 ケース表の準備

機械学習のデータの準備における最初のステップは、ケース表の作成です。

すべてのデータが単一の表内にあり、各ケース(レコード)のすべての情報が単一の行に含まれている場合(単一レコード・ケース)、このプロセスは完了しています。データが複数の表に存在している場合、データソースの作成には、ビューの作成が伴います。ここでは簡易的に、「ケース表」という用語は、表またはビューを指すものとします。

関連トピック

3.8.1 列のデータ型の変換

OMLでは、文字列の列は質的として、数値列は量的として処理されます。質的として扱う数値列がある場合は、文字列に変換する必要があります。たとえば、週の日数などです。

たとえば、郵便番号は様々な郵便区を識別しますが、順番は示しません。郵便番号を数値列に格納すると、量的属性として解釈されます。この場合、列データがモデルによって質的属性として使用されるように、データ型を変換する必要があります。これには、TO_CHAR関数を使用して1から9の数字を変換し、LPAD関数を使用して先頭の0 (ある場合)を保持します。

LPAD(TO_CHAR(ZIPCODE),5,'0')

3.8.2 日時列値の抽出

EXTRACT関数を使用して、日時または期間の値から値を抽出できます。

EXTRACT関数は、日時または間隔の値の式から、指定された日時フィールドの値を抽出して返します。抽出できる値は、YEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURTIMEZONE_MINUTETIMEZONE_REGIONおよび TIMEZONE_ABBRです。

次の例では、指定した日時値がsales_tsビューから抽出されます。sales_tsビューには、CUST_IDおよびTIME_STAMP列が含まれています。
select cust_id, time_stamp, 
    extract(year from time_stamp) year, 
    extract(month from time_stamp) month, 
    extract(day from time_stamp) day_of_month, 
    to_char(time_stamp,'ww') week_of_year, 
    to_char(time_stamp,'D') day_of_week, 
    extract(hour from time_stamp) hour, 
    extract(minute from time_stamp) minute, 
    extract(second from time_stamp) second
from sales_ts

3.8.3 テキスト変換

Oracle Machine Learning for SQLを使用したテキスト処理について説明します。

OML4SQLを使用してテキストを処理できます。ケース表内のテキスト列は、適切に変換すると処理できるようになります。

テキスト列は、ビューではなく、表内に存在している必要があります。変換プロセスでは、いくつかのOracle Textの機能が使用され、表の各行のテキストがそれぞれ別個のドキュメントとして処理されます。各ドキュメントは、数値およびテキスト・ラベルを持つ用語と呼ばれるテキスト・トークンのセットに変換されます。テキスト列は、DM_NESTED_NUMERICALSのネストした列に変換されます。

3.8.4 ビジネスおよび分野に依存した変換について

ビジネス上の問題に従い、データを変換する必要がある理由を理解します。

一部の変換は、ビジネス上の問題の定義によって決まります。たとえば、高い利益を生む顧客を予測するモデルを作成する場合を考えます。現在の顧客の利益データはドルなどの通貨で表されているため、どの程度が「高い利益」なのかを定義する必要があります。この場合、モデルを作成する前に、これまでの経験から導かれたいくつかの式を使用して、利益属性を「低」、「中」および「高」の範囲に再コード化できます。

その他の一般的なビジネス上の変換には、データ情報の経過時間への変換があります。たとえば、出生日は年齢に変換できます。

専門知識は、データをどのように準備するのかを決める上で非常に重要になることがあります。たとえば、一部のアルゴリズムでは、通常の範囲から遠く外れた値がデータに含まれていると、信頼できない結果が生成されます。場合によっては、これらの値は誤差または異常値を表します。別の場合では、これらの値が意味のある情報を提供することもあります。

関連トピック

3.8.5 ネストした列の作成

トランザクショナル・データでは、各ケースの情報が複数の行に含まれています。データソースにトランザクショナル・データが含まれる場合(複数レコード・ケース)、ネストした列でトランザクションをケース・レベルに集計する必要があります。

例として、本番レベルでの機械学習時のスター・スキーマにおける売上データがあります。売上は、その製品が多数の店舗で多数の顧客に対してある期間にわたって販売されるため、単一の製品(ケース)の多数の行に格納されます。

関連項目:

トランザクショナル・データのネストした列への変換の詳細は、「ネストしたデータの使用」を参照してください。