本書は2017年4月1日にTeradata Japanのブログに掲載された内容を、再掲載したものです。
掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
著者 山本 泰史 (やまもと やすし)
データの変換
データベースから得られたデータの幾つかは、さらに分析に即した形で変換され、最終的なデータセットとして用意されることになります。ここではその変換処理について説明を加えていきます。
■コード付与に関する処理
データセットに組み入れるデータが、本来分析手法が必要とするデータ形式と合致しない場合、合致させるよう変換する必要があります。多くの分析手法は数値データを必要としますし、また一方で、データを簡略化して変数に組み入れたほうがモデルの説明力が増す場合もあります。
再コード化
もっともシンプルなコード付与の手法がこれに当たります。通常データマイニングツールは数値データでデータセットが用意されていることを求めます。性別データが女性/男性と漢字で蓄積されている場合、F/M、もしくはFemale/Maleと英語で表記されている場合には、これをそれぞれ0と1に変換します。
デザインコード化
性別が0と1に変換されたコードを考えた場合、0と1には量的な意味はありません。女性=0、男性=1としていたデータを女性=1、男性=0としても同じ意味であり、その意味するところは単純に男性と女性は「異なる」ということを表現しているのみです。これをより正確な形で表現するならば、女性、もしくは男性というカラムを用意する形で横にデータを展開し、それを分析の対象にした方がより分析手法にデータの正確な意味を伝えられるということになります。以下の図4は性別を横に展開した例です。どちらかに1がつけばもう一方のカラムは0となり、これによってデータサンプルが女性か男性かを理解できます。このような処理をデザインコード化と呼びます。
図4にはもう一つの変数群を用意しました。各ブランドの購入顧客には1、未購入顧客には0というデータを割り当てています。2進法的に考えるのであればこれがフラグを意味し、オン/オフの情報を意味します。性別とは異なり、複数のブランドを購入している顧客には、複数のカラムに1のデータが付与可能となっています。
階級コード化
連続値、例えば金額のような量的変数をカテゴライズ、つまり間隔尺度に変換します。データベースから年収のカラムを取得したとします。しかしながら年収は一般に3円、80兆円といった値はとりません。また、自己申告が1円単位の正確さを持っているはずもありません。過多に申告したり、過少に申告したりする方もいらっしゃることでしょう。であれば高年収(= 3)、中程度の年収(= 2)、低年収(= 1)のような形でカテゴライズしたほうが、分析の際には好ましいかもしれません。このような場合に、適切に値を分割して階級コードを割り当てることによって、最終的に変数に組み入れたい形に変換可能となります。上記の例であれば、年収の上位33.33...%に含まれる顧客には3とコード化、次位33.33...%には2とコード化、下位33.33...%には1とコード化するといった処理を施します。
■行に対する処理
ここまでで触れてきた処理のほとんどが列、つまり変数をどのように作成してデータセットに組み入れるかという点でした。しかしながらモデルの精度を上げる、モデル構築用のセットと評価用のセットを分ける、スコアリングを実施する本番用のデータを準備しておく等、行を分割して複数のデータセットを作成するための手法も存在します。単純に分析手法をデータセットに適用するだけでなく、実際にデータマイニングの結果が現実のビジネスに適用可能かを考える上で、このような処理は重要な役割を果たします。
データセットの分割
例えば自社がデータベースに管理している全顧客を用いてデータセットを作成した場合、分析手法はその全データを用いてモデルを作成します。そのとき、このモデルの精度は評価可能でしょうか。利用した全データに対してこのモデルを適用すれば、モデルはそのデータを用いて作成されたため、合致するのは当たり前であり、それは何も証明していません。作成されたデータは、自社の商売に関する動向を反映した、別のデータに当てはまるかを証明しなければ、今後の利用に耐えうると評価できません。残念ながら将来のデータは今手元には存在しないため、既存のデータを幾つかに分割し、それぞれをモデル構築用、評価用、実際のスコアリング用といった形で分割する必要があります。分析手法やパラメーターを調整したモデルを幾つか作成し、どのモデルが最も合致するかを評価することも考えられます。このとき、当初に作成された全顧客に関するデータセットは、幾つかに分割されることになります。
サンプリング
サンプリングの意図は分割と同じなのですが、1,000行あるデータを、200行*5に分割するのではなく、1,000行あるデータから20行分を5回分けて抽出してそれぞれをデータセットとする手法です。つまり900行分は処理の対象とはならず、従って分析の対象ともなりません。また、5回抽出されたそれぞれのデータはランダムに抽出され、従ってそれぞれは均質な、しかしながら別の5つのデータセットが得られることを期待しています。抽出の際には1度抽出したデータを抽出しない方法(非復元抽出)と1度抽出したデータも抽出の対象とする(復元抽出)方法のどちらかを選択します。また重要なカラム、つまり変数に関してランダムさを強要する方法も存在します。例えば得られたどのサンプルも、データ値全体の男女構成比(仮に1:1とします)を維持するように作成する方法です。この場合はサンプリング時に性別の変数をまず男女に層化し、サンプルを男性の層から1つ抽出したら、次は女性の層から1つ抽出するといった形でサンプリングを行ないます。これによって作られた全てのデータセットは男女比1:1を維持されて作成されることになります。前者のような全く無作為にサンプル抽出する手法を「無作為抽出」、後者のような層化を行い、そこから抽出する手法を「層化抽出」と呼びます。いずれにしても出来るだけ同じ性質を持つ、つまり均質なデータセットを複数個作成することがここでの目的となります。
サンプリングは元々、非常に大規模なデータを全て分析の対象とする際に非常に多大な作業と時間を要するため、それを回避するために適用されてきた手法です。母集団からランダムに抽出された標本集団(サンプル)は、おおよそのレベルにおいて母集団の性質を示してくれるとの仮定に成り立っています。もちろん、これは多くのケースにおいて正しいのですが、今日の強力なコンピューターパワーを利用できる環境において、サンプリングをしなければならない必然性は薄まっています。利用可能なデータ、つまり母集団もしくはそれに限りなく近い集団を利用してその性質を説明できるのであれば、何も標本抽出する必要がないことは明らかです。もちろんある分析を適用可能か試すためにサンプルデータを取得する、データ値そのものを確認するためにサンプルデータを取得する、または分割処理と同じように複数のデータセットを用意する目的でサンプルデータを取得する等、サンプリングの機能そのものは他にも使い道があり、便利なものです。
意図的なデータセットの分割
分割やサンプリングが均質なデータセットを作成することを目的としているのに対して、非均質なデータセットを複数作成したい場合もあります。例えば、売上金額貢献度の高い顧客群の離反予測モデルと、売上金額貢献度の低い顧客群の離反予測モデルは、別に作成したいかもしれません。前者はビジネス上のインパクトが大きく、より精度の高いモデルを必要とします。そのようなモデルを構築するときに比較的売上金額貢献度の低い顧客群のデータが混じりこみ、結果としてモデルが凡庸なものになってしまえば、売上金額貢献度が高いにも関わらず離反してしまう顧客を特定する際の精度が下がってしまいます。また逆もしかりで、売上貢献度が低く、経費効率を鑑みると個人収益では赤字になってしまうような顧客に対して、リテンションのためのアクションを行なっても経費の垂れ流しとなってしまうかもしれません。この中から関係を再構築できる可能性のある顧客群と、なんらアクションの意味がない顧客群を見分けるのであれば、売上貢献度低から、少なくとも中程度の売上貢献度に変化した顧客が分析の対象となります。同様に様々な働きかけを行なってもなんら反応の無かった顧客の特性も見分ける必要があるということになります。これらの理解こそが経費を適切に配分することにつながり、顧客に対するアクション(とそれに伴う経費)を投資と見立てたときに、投下資本収益率の高い顧客群を理解することが可能となります。
このようなデータセットの分割は売上貢献度だけでなく、商圏特性毎に分割してそれぞれにモデルを作成する、男女に分けてそれぞれにモデルを作成する、利用チャネルに分けてモデルを作成する、同一顧客でも生活ステージ毎にモデルを作成する等、様々に考えられます。これによってモデルの説明力を増加させ、精度を高めることが目的となります。ただし、その際に分割基準に利用した変数はデータセットの中には組み入れられません。男女に分けた2つのデータセットの片方に、変数として性別を組み入れたら、そこには男性しか(もしくは女性しか)存在しないため、そのデータは何の説明も出来ません。
以上、ここまででデータセット作成に関するプロセスに関して概観してきました。検討しなければならない点は多く、データマイニングプロセスにまつわる時間全体の半分以上をこのプロセスに費やすことになります。また作成されたモデルが納得できるモデルとならない場合はデータセットに立ち返り、新たに変数を追加修正する、不要な変数を削除する、もしくは適切に行を選択するという作業を行なうことになります。このような作業の反復によって精度の高いモデルが生まれ、実務に活用できるようになります。