前回は、クラスタ分析の「ビジネスにおける応用例」、「分析手法の概要」と「分析時の心構え」について説明しました。今回はOSS(オープンソースソフトウェア)のR 言語(Version 3.1.2)を使って、前回紹介した代表的なアルゴリズムによるクラスタ分析を実行してみましょう。最初に今回の分析対象データの収集と加工方法について述べ、その後、階層的手法のウォード法と非階層的手法のK-Means法を代表例として、各手法の分析プロセスを説明していきます。
なお、本稿ではWindows 7 におけるR Version 3.1.2の実行結果を示しています。Mac OS XとLinux環境においても基本的に同様の実行結果が得られます。クラスタ分析で利用するパッケージと関数の一部はVersion 3.1.0以降が必要となるので、本稿にあるRサンプルコードを実行する場合、Version3.1.0以降のRをご利用ください。
1 データの収集と加工
今回の分析例では、有担保ローンという、比較的ライフイベントを色濃く反映しやすく、かつ厳密な審査過程を経ないと承認されない商材を軸に地域的な貸し出しの特徴量がないかを調査することを目的とします。これにより、融資担当者は、地域ごとの特性を元に、リスク傾向を把握し、利率の設定提案の参考にしたり、新しい金融商品をローカライズしながら試験運用したり、比較的利幅が大きく、金融機関に安定的な収入を齎す長期有担保ローンの離脱防止策をクラスタ別にモデリングすることも可能になるかもしれません。
そこで、今回は住宅金融支援機構 が公表している、フラット35利用者調査(2013年度集計表) の「全体」データを利用し、前回の連載の「2.ビジネスにおける応用例」の「(3)テストマーケットにおけるマーケティング施策の評価」をシミュレーションします。
まずはデータを確認していきましょう。今回使用する「全体」のExcelファイルの「第1-1表 地域別都道府県別主要指標」シートには、全国、地域別、都道府県別のフラット35利用者の主要指標に関する統計結果が記載されています。フラット35利用者調査の主要指標として表 1のデータ属性が提供されています。表 1の「フィールド説明」欄には、資料「調査の概要」から抜粋した各指標の意味を記載しています。
フィールド# | Excel列名 | フィールド名(単位) | フィールド説明 |
---|---|---|---|
1 | B列 | 都道府県 | 都道府県名 |
2 | D列 | 件数 | 調査対象件数 |
3 | E列 | 年齢(歳) | 利用者の年齢(調査対象平均) |
4 | F列 | 家族数(人) | 利用者を含む入居予定家族人員の合計(調査対象平均) |
5 | G列 | 世帯の年収(万円) | 利用者及び収入合算者の年間収入の合計(調査対象平均) |
6 | H列 | 住宅面積(m2) | バルコニー部分の面積を除いた専有面積(調査対象平均) |
7 | I列 | 所要資金額(万円) | 申し込み時点における予定建設費と土地取得費を合計したもの(調査対象平均) |
8 | J列~Q列 | 資金調達の内訳(万円) | 所要資金額のカテゴリごとの資金額 |
9 | R列 | 1か月当たり予定返済額(千円) | 借入金に対する年間返済額の1/12の額 |
10 | S列 | 総返済負担率(%) | 各利用者の総返済負担率(1か月当たり予定返済額/世帯月収)の総和をサンプル数で除したもの |
前回の「まとめ」でクラスタ分析の心構えとしても紹介しましたように、クラスタ分析に利用するデータ属性は分析目的に合わせて選別する必要があります。本稿では説明の便宜上、都道府県別の「年齢」、「家族数」、「世帯の年収」、「住宅面積」、「所要資金額」の5つ基本指標に着目し、各都道府県を1つのマーケットとしてみなし、マーケットのクラスタ分析を試みます。
まず準備作業として、5つの指標に関する都道府県別データをCSVファイルに保存し、分析用データファイルを作成しましょう。CSVファイルはここのリンクからダウンロードできます。(CSVファイルは文字コードがUTF-8、改行コードがLFとなっています。)
次に、RコンソールにおいてCSVファイルのURLを指定し、データを読み込みます。
#URLからCSVファイルを読み込む
data.orig <- read.csv("http://enterprisezine.jp/static/images/article/6873/flat35_research_2013.csv", header=TRUE, row.names="都道府県", fileEncoding="UTF-8")
関数read.csvを使って、CSVファイルのデータを分析用データフレームdata.origとして格納しました。CSVファイルの先頭行に列名がヘッダーとして設定されているので、引数headerに「TRUE」を指定するとともに、データ1列目の都道府県名をデータの行名として利用するため、引数row.namesに列名「"都道府県"」を指定しました。また、正しい文字コードでCSVファイルを読み込むために、引数fileEncodingに「"UTF-8"」を指定しました。
データが正しく読み込まれたことを確認するには、関数headを使って、分析用データフレームdata.origの先頭の数行を出力します。
#分析用データフレーム「data.orig」の先頭の数行のデータを表示
head(data.orig)
図 1のように列名、行名と分析対象データが正しく設定されていれば、データフレームdata.origが作成されます。ただし、表 1の「フィールド名(単位)」から分かるように、データフレームdata.origの各列のデータは単位がそれぞれ異なります。これからの分析において単位が異なるデータ属性の特徴を相対的に比較する必要があるため、データフレームdata.origに対して関数scaleによる標準化を行い、各列の値を平均値が0、標準偏差が1になるようにデータのスケールを統一します。
#分析用データフレームに対する標準化の実施
data.scale <- scale(data.orig)
ここまででデータの収集と加工が完了しました。次に、データdata.scaleに対して階層的手法ウォード法と非階層的手法K-Means法をそれぞれ適用し、クラスタ分析のプロセスを説明します。