メイン コンテンツをスキップする 補完的コンテンツへスキップ

データ型の変換

機械学習モデルをトレーニングする場合、データセットがすべてのデータ型を正確に表していることが重要です。変数の表現が不正確であると、モデルの正確度が低くなるか、見た目は良くても実際のデータに適用すると予測がうまくいかないモデルになる可能性があります。各特徴量が測定するものと、その特徴量に適切な表現を割り当てる方法を識別できる必要があります。

一般に機械学習では、float または double のデータ型はすべて数値とみなされ、文字列はすべてカテゴリとみなされます。ただし、次の例でわかるように、それが必ずしも正しい解釈であるとは限りません。

例は、次の質問に答えるために集計されたデータセットに基づいています。「ユーザーは、最初の購入日から 30 日以内に製品を再度購入しますか」データセットには、string、double、integer、boolean、date など、異なるデータ型の列が含まれています。

列とデータ型

列名とデータ型を含むテーブル。

文字列

次のテーブルは、データ型が string であるデータセット内の 2 つの列を示しています。MarketingSource の列には、値の間に測定可能な差はありません (例: 「Facebook」 と 「Customer Referral」の間)。数値またはスカラーの関係がないため、列はカテゴリとみなす必要があります。

一方、SourceCostPerAcquisition の列の値は「Low」から「High」の範囲であり、その差はより測定可能なものとなっています。ソース獲得あたりの平均コストをドルで示すほど正確ではありませんが、この値の間には明確な差があります。この場合、SourceCostPerAcquisition をカテゴリとみなすか、数値とみなすかについて議論できます。

PersonID、MarketingSource、SourceCostPerAquisition 列のサンプル データ

サンプル データを含むテーブル。

こうした状況での推奨方法は、構成を個別に 2 つ作成し、それぞれに異なる可能性のある特徴量の分類を割り当てます。これらの実験は個別に実行されます。最初の構成は元の文字列表現用です。2 番目の構成で、数値マッピングを異なる値に付与し、列を double データ型に変換します。例えば、「Low」 = 1.0、「Medium」 = 2.0、「High」 = 3.0 にします。各構成の実行後、特定のユース ケースでどちらの構成が適切かを理解できるようになります。文字列表現を使用することが理にかなっている場合もあれば、数値表現が理にかなっている場合もあります。

数値

列のデータが表す内容に測定可能な差がある場合は、数値で表す必要があります。例として、コスト、収益、利益、回数、合計、平均などがあります。

データセットには、辞書または ID のような増分値であるため、測定できない数値が含まれる場合があります。この例では、PersonID 列の値が「Person_」で始まっていない場合、数値と間違えられた可能性があります。ID を数値として扱うと、これらの行の間の差が不正確に表現されます。このような場合のベスト プラクティスは、ID を文字列として表すことです。データセットを使用する前に、いずれかの数値列をカテゴリ値に変換する必要があるかどうかを判断する必要があります。

日付

機械学習のコンテキストでは、日付フィールド タイプはカテゴリ変数です。日付とタイムスタンプは互いに減算できますが、日付にはいくつかのコンポーネントがあります。問題は、どのコンポーネントをどのように検討するかです。年、月、日、時間の、どの値にする必要がありますか。時差を分単位にする必要がありますか。予測を最適にするためには、日付を少なくともいくつかのコンポーネントに分類する必要があります。これらのコンポーネントの一部はカテゴリであり、一部は数値である可能性があります。

例えば、日付は曜日に分類できます。曜日は、数値 (1 から 7) または文字列の値 (「Sunday」から「Saturday」) として表すことができます。

数値と文字列としての曜日

数値と文字列で表された曜日のテーブル。

曜日を数値で表す場合、いくつかの問題があります。週の始まりは月曜日でしょうか、それとも日曜日でしょうか。また、曜日が重要な場合であっても、周期傾向に隠されてしまう場合があります。

チャート 1 のように、週が月曜日から始まる場合は、その傾向が非常によくわかる場合があります。

チャート 1: 週が月曜日から始まる 1 日あたりの平均売上高

明確な近似曲線を示す、1 日ごとの売上高のグラフ。

チャート 2 にはチャート 1 と同じデータがありますが、週の始まりが日曜日になるように 1 日ずれています。ここでは、データの有意性は非常に低くなっています。

チャート 2: 週が日曜日から始まる 1 日あたりの平均売上高

明確な近似曲線が示されない、1 日ごとの売上高のグラフ。

チャート 3 は、日付のコンポーネントを数値として使用する場合の別の問題を示しています。重要なパターンが存在する可能性があっても、線形でない場合は見逃されてしまいます。このような理由、および日付コンポーネントにときどき見られる周期傾向 (毎日または四半期ごとの季節性など) のため、これらのコンポーネントを数値としてではなく、カテゴリ値として使用することをお勧めします。

チャート 3: 週半ばに高くなる 1 日あたりの平均売上高

周期傾向が週の半ばにピークに達する 1 日あたりの平均売上高のグラフ。

Qlik AutoML は、自動特徴量エンジニアリングを使用して、日付とタイムスタンプのコンポーネントをそれぞれ独自の列に分離します。これは、作成するモデルの予測能力を改善する助けになります。親日付特徴量から派生している自動設計特徴量は、数値特徴量として分類されます。必要に応じて、この機能を上書きし、日付列をカテゴリ別として扱うことができます。詳細については、「日付特徴量エンジニアリング」を参照してください。

日付の差

増分 ID はレコードがテーブルに追加された順序のみを説明するため、増分 ID のより適切な代替として日付の差を使用できます。増分 ID はボリューム (多くの例では 1 日あたりの顧客数) の変化によって簡単に歪められますが、日付の差はその速度にとらわれません。

日付の差は、秒、時間、日、月、四半期などの単位のいずれかになります。所有しているデータの粒度に最も関連するものを選択してください。例えば、月単位のデータを見る場合、日単位の日付の差には実質的な価値はありません。その場合、月単位での日付の差がより適切になります。

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。