アソシエーションルール(連関規則・相関ルール):R言語

分析に使われる場面

  • 観光関連メディア(HPなど)の閲覧履歴から、どのページとどのページがよく閲覧される傾向にあるかを見いだす。
  • 観光行動・交通行動調査などから、どの場所を訪問した人が別のどの場所を訪問する傾向があるかを見いだす。
  • ある観光商品を好む人は、別のどのような観光商品を好む傾向があるのかを見いだす。

ライブラリの読み込み

  • Rでアソシエーションルール分析を行うために、arulesというパッケージを読み込みます。
  • Windowsの人は、以下の手順でパッケージを読み込んでください。
    • RGui画面上のメニューバーから、「パッケージ」→「パッケージのインストール」→「CRAN mirror」から適当なミラーサイトを選ぶ→「Packages」リストから「arules」をんでOKボタンをクリックする
    • 再びRGui画面上のメニューバーから、「パッケージの読み込み」→選択画面から「arules」を読み込む
  • Macの人は、以下の手順でパッケージを読み込んでください。
    • RGui画面上のメニューバーから、「パッケージとデータ」→(初めてパッケージをインストールする場合は)「パッケージインストーラ」→「CRAN mirror」から適当なミラーサイトを選ぶ→「arules」を選び、「パッケージ間の依存関係を解決」をチェックし、「選択をインストール」をクリック
    • 再びRGui画面上のメニューバーから、「パッケージとデータ」→「パッケージマネージャ」→「arules」にチェックを入れる。
  • すでに一度、パッケージをインストールしている場合は、次回から以下のコマンドをコンソール上で入力すればよい。
    library(arules)

データを準備する

  • 以下のファイルをダウンロードして下さい。
  • Rの作業領域を、ファイルをダウンロードしたフォルダに指定する。
    • Windowsの場合は、「ファイル」→「ディレクトリの変更」で指定する(VISTAの場合は、自分のドキュメントフォルダの下にフォルダを作成しておくとよい)
    • Macの場合は、「その他」→「作業領域の変更」で指定する

観光行動履歴データのマイニング

データの読み込み

  • 観光行動履歴データ"kamakura.txt"を読み込む。
  • Windowsの場合
    > kama <- read.table("kamakura.txt",sep=",",header=F,row.names=1)
    > colnames(kama) <- c("鶴岡八幡宮","鎌倉宮_大塔宮","高徳院_大仏","建長寺",
    "円覚寺","長谷寺_長谷観音","瑞泉寺","明月院","東慶寺","浄智寺","報国寺",
    "大船観音寺","銭洗弁天","県立フラワーセンター","県立近代美術館","鎌倉国宝館",
    "鎌倉文学館","鎌倉海岸","天園ハイキングコース")
    > summary(kama)
  • Macの場合(日本語がうまく表示されないことがあるので、英文名を使う)
  • Macで日本語を使いたい場合、Rprofile.siteをダウンロードして、「Macintosh HD」→「ライブラリ」→「Frameworks」→「R.framework」→「Resources」→「etc」においてください。(Rprofile.siteファイルは、桑原先生からお借りしました。ありがとうございます。)
    > kama <- read.table("kamakura.txt",sep=",",header=F,row.names=1)
    > colnames(kama) <- c("Tsurugaoka_Hachimangu","Kamakuragu","Kotokuin_Daibutsu","Kenchoji","Enkakuji",
    "Hasedera_Hasekannon","Zuisenji","Meigetsuin","Tokeiji","Jochiji","Houkokuji",
    "Ofuna_kannon","Zeniarai_benten","Flower_center","Kindai_Bijutukan",  
    "Kamakura_Kokuhokan","Kamakura_Bungakukan","Kamakura_kaigan",
    "Tennenn_hiking_course")
    > summary(kama)
  • データをトランザクションデータに変換する
    > kama.tran <- as(as.matrix(kama),"transactions")
    > inspect(kama.tran)
  • 30人以上が「行く」と回答した観光施設をグラフ表示する
    > itemFrequencyPlot(kama.tran,type="absolute",support=30,ylim=c(0,400))
  • 支持度が0.1以上の観光施設をグラフ表示する
    > itemFrequencyPlot(kama.tran,support=0.1,ylim=c(0,1))
  • 訪問率トップ10の観光施設をグラフ表示する
    > itemFrequencyPlot(kama.tran,topN=10,ylim=c(0,1))

相関ルールの抽出

  • apriori()関数を使って相関ルールを抽出する
  • 支持度
    # supp=支持度、confidence=信頼度、maxlen=頻出アイテムの最大数
    > kama.ap1 <- apriori(kama.tran,parameter=list(supp=0.1,maxlen=5,confidence=0.3))
    > print(kama.ap1)
    > inspect(head(SORT(kama.ap1, by="support"), n=22))

有効なルールの抽出

  • パラメータ毎にデータを並び替えてみる。confidence値やlift値の大きい順にソートし、表示する。
    > inspect(head(SORT(kama.ap1, by="confidence"), n=22))
    > inspect(head(SORT(kama.ap1, by="lift"), n=22))
  • サブセットを抽出する
    > kama.ap1.sub1 <- subset(kama.ap1, subset=confidence>0.6&lift>2)
    > inspect(SORT(kama.ap1.sub1))
  • 特定のルールを抽出する。
    > kama.ap1.sub2 <- subset(kama.ap1, subset=(rhs %in% "Kotokuin_Daibutsu") & (lift>=1))
    > inspect(SORT(kama.ap1.sub2))

HP閲覧履歴データのマイニング

データの読み込み

  • HP閲覧履歴データ"hpview1.txt"
    hpview1 <- read.table("hpview1.txt",sep=",",header=F)
    colnames(hpview1) <- c("ID","HP")
    # トランザクションデータとしてのデータの読み込み
    hpview1.tran <- read.transactions("hpview1.txt",sep=",",format="single",cols=c(1,2))
    # hpview1.tran <- as(hpview1, "transactions")
    inspect(hpview1.tran)
    # 30回以上現れるHPを表示(度数で表示)
    itemFrequencyPlot(hpview1.tran, type="absolute",support=30, ylim=c(0,200))
    # 全体の10%以上現れるHPを表示(割合で表示)
    itemFrequencyPlot(hpview1.tran, support=0.1, ylim=c(0,1))
    # マトリックスへの変換
    hpview1.mat <- as(hpview1.tran,"matrix")
    summary(hpview1.mat)
  • HP閲覧履歴データ"hpview0.txt"(内容は"hpview1.txt"と同じだが、数値データとなっている)
    hpview0 <- read.table("hpview0.txt", sep=",", header=T)
    # hpview0 <- read.table("C:/Program Files/R/R-2.7.2/hpview0.txt", sep=",", header=T)
    summary(hpview0)
    # カテゴリカルデータに変換
    hpview0[,1] <- as.factor(hpview0[,1])
    hpview0[,2] <- as.factor(hpview0[,2])
    hpview0.tran <- as(hpview0, "transactions")
  • HP閲覧履歴データ"hpview2.txt"(内容は"hpview1.txt"と同じだが、バスケット形式になっている)
    hpview2 <- read.table("hpview2.txt", sep=",",header=TRUE)
    hpview2.mat <- as.matrix(hpview2)
    hpview2.tran <- as(hpview2.mat, "transactions")
    dimnames(hpview2.mat) <- list(paste("ID",c(1:501), sep = ""),)

相関ルールの抽出

  • apriori()関数を用いてルールを抽出する。さらに、support値の大きい順にソートし表示する。
    # デフォルトでは、parameter=list(supp=0.2,maxlen=5,confidence=0.8)となっている。
    hpview1.ap1 <- apriori(hpview1.tran,parameter=list(supp=0.05,maxlen=4,confidence=0.3))
    print(hpview1.ap1)
    inspect(head(SORT(hpview1.ap1, by="support"), n=18))

有効なルールの発見

  • パラメータ毎にデータを並び替えてみる。confidence値やlift値の大きい順にソートし、表示する。
    inspect(head(SORT(hpview1.ap1, by="confidence"), n=18))
    inspect(head(SORT(hpview1.ap1, by="lift"), n=18))
  • サブセットを抽出する
    hpview1.ap1.sub1 <- subset(hpview1.ap1, subset=confidence>0.45&lift>2)
    inspect(SORT(hpview1.ap1.sub1))
  • 特定のルールを抽出する。
    hpview1.ap1.sub2 <- subset(hpview1.ap1, subset=(rhs %in% "HP1008") & (lift>1))
    inspect(SORT(hpview1.ap1.sub2))

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-05-21 (火) 10:35:04 (2254d)