R言語におけるAprioriアルゴリズムの応用

R言語におけるAprioriアルゴリズムの応用

[[193979]]

I. コンセプト

関連性分析は、大規模なデータセットに隠された意味のあるつながりを発見するために使用されます。発見された関係は、関連ルールまたは頻繁なアイテムセットの形式で表現できます。

アイテムセット: 関連分析では、0 個以上のアイテムのセットをアイテムセットと呼びます。アイテムセットに k 個のアイテムが含まれている場合、それは k アイテムセットと呼ばれます。たとえば、{ビール、おむつ、牛乳、ピーナッツ} は 4 つのアイテムのセットです。空セットは、アイテムを含まないアイテムセットです。

相関ルール: X → Y という形式の含意式です。ここで、X と Y は互いに素な項目セット、つまり X∩Y=∅ です。関連ルールの強さは、そのサポートと信頼度によって測定できます。

サポート: アイテム セットまたはルールがすべてのものに出現する頻度。特定のデータ セットに対してルールを使用できる頻度を決定します。 σ(X): アイテムセットXのサポート数を表す

アイテムセット X のサポート: s(X) = σ(X) / N; ルール X → Y のサポート: s(X → Y) = σ(X∪Y) / N

信頼性: X を含むトランザクションで Y が発生する頻度を決定します。 c(X → Y) = σ(X∪Y)/σ(X)

サポートは重要な指標です。サポートが非常に低いルールは偶然にしか現れず、サポートが低いルールはおそらく無意味だからです。したがって、サポートは通常、それらの意味のないルールを削除するために使用されます。

信頼度尺度は、ルールによる推論の信頼性です。特定のルール X → Y の場合、信頼度が高いほど、X を含むものの集合に Y が出現する可能性が高くなります。つまり、X が与えられた場合の Y の条件付き確率 P(Y|X) は大きくなります。

2. R言語でのAprioriアルゴリズムの実装

R 言語での Apriori アルゴリズムの実装は、arules パッケージに含まれています。この記事では、アルゴリズムの実装については触れず、arules パッケージを適用して関連ルールのマイニングを実現することのみを説明します。

1. データ ソース: arules パッケージの Groceries データセットを使用します。このデータセットは、実際のスーパーマーケットの 1 か月間の買い物データで、9,835 件のトランザクションが含まれています。スーパーマーケットの1日12時間営業を基準に計算すると、1時間あたりの取引件数は約9835/30/12=27.3となり、中規模スーパーマーケットであることがわかります。

  1. > library(arules) #arulesパッケージをロードする
  2. > データ(食料品)
  3. > 食料品
  4. スパース形式トランザクション 
  5. 9835件のトランザクション( 
  6. 169 項目 (列)

2. データの調査と準備:

(1) トランザクションデータの各行は、単一のインスタンスを指定します。各レコードには、カンマで区切られた任意の数の製品のリストが含まれます。inspect() 関数を使用すると、スーパーマーケットのトランザクションレコードと各トランザクションの製品名を確認できます。summary() 関数を使用すると、データセットに関する基本的な情報を表示できます。

  1. >inspect(Groceries[1:5]) #inspect関数を使用して、Groceriesデータセットの最初の5つのトランザクションレコードを表示します。
  2. アイテム
  3. 1 {柑橘類、半完成パン、マーガリン、調理済みスープ}
  4. 2 {トロピカルフルーツ、ヨーグルト、コーヒー}
  5. 3 {全乳}
  6. 4 {種なしフルーツ、ヨーグルト、クリームチーズ、ミートスプレッド}
  7. 5 {その他の野菜、全乳、練乳、長期保存可能なベーカリー製品}
  8. <br>> まとめ(食料品)
  9. トランザクションはitemMatrixとしてスパース形式保存され、  
  10. 9835(要素/アイテムセット/トランザクション)および 
  11. 169列項目) 密度0.02609146
  12.   
  13. 最も頻繁に使用される項目:
  14. 全乳、その他野菜、ロールパン、ソーダ、ヨーグルト(その他)
  15. 2513 1903 1809 1715 1372 34055
  16.   
  17. 要素(アイテムセット/トランザクション)の長さの分布:
  18. サイズ
  19. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29
  20. 2159 1643 1299 1005 855 645 545 438 350 246 182 117 78 77 55 46 29 14 14 9 11 4 6 1 1 1 1 3
  21. 32
  22. 1
  23.   
  24. 最小1 問目 中央値 平均値 3 問目最大値.
  25. 1.000 2.000 3.000 4.409 6.000 32.000
  26.   
  27. 拡張アイテム情報が含まれます - 例:
  28. ラベル レベル2 レベル1
  29. フランクフルトソーセージ 1本(肉ソーセージ)
  30. ソーセージ2本 ソーセージ肉ソーセージ
  31. レバーローフソーセージ肉ソーセージ3個
  1. > itemFrequency(Groceries[,1:3]) #itemFrequency() 関数を使用すると、商品のトランザクション率を表示できます<br>フランクフルトソーセージ レバーローフ <br>0.058973055 0.093950178 0.005083884

分析:

①密度値0.02609146(2.6%)は、非ゼロのマトリックスセルの割合を示します。

データ セットには、合計 9835 行 (取引記録) と 169 列 (取引されるすべての種類の商品) があります。したがって、マトリックスには 9835*169=1662115 の位置があります。合計 1662115*0.02609146=43367 個のアイテムが 30 日以内に購入されたと結論付けることができます。さらに、各トランザクションで 43367/9835=4.409 個のアイテムが購入されたと結論付けることができます。平均列から、(平均 = 4.409) 計算が正しいことがわかります。

②最も頻繁に購入される商品:取引データの中で最も頻繁に購入される商品をリストします。全乳は 9835 件の取引のうち 2513 回購入されたため、全乳がすべての取引に出現する確率は 2513/9835 = 25.6% であると結論付けることができます。

③要素(アイテムセット/トランザクション)の長さ分布:トランザクションのサイズに関する統計情報を表示します。合計2159のトランザクションに1つのアイテムが含まれ、1つのトランザクションに32のアイテムが含まれています。分位分布から、トランザクションの25%に2つ以下のアイテムが含まれ、約半数のトランザクションに3つのアイテムが含まれていることがわかります。

(2)製品サポートの可視化 - 製品頻度グラフ

統計を視覚化するには、itemFrequenctyPlot() 関数を使用して、含まれる特定のアイテムのトランザクション比率を示す棒グラフを生成できます。多くの種類の製品が含まれているため、一度にすべてを表示することはできません。そのため、support または topN パラメータを使用して、一部の製品を表示から除外することができます。

(3)取引データの可視化 - 疎行列の描画

スパース行列全体は、image() 関数を使用して視覚化できます。

  1. image(Groceries[1:5]) # 5行169列の行列を生成します。行列内の黒で塗りつぶされたセルは、このトランザクション(行)で製品(列)が購入されたことを示します。

上の図からわかるように、レコードの最初の行 (トランザクション) には 4 つの商品 (黒い四角) が含まれています。このような視覚化は、データ探索に非常に便利なツールです。これは、潜在的なデータの問題を特定するのに役立つ場合があります。たとえば、列は製品名を表しているため、列が上から下まで埋められている場合、この製品はすべてのトランザクションで購入されたことを意味します。一方、グラフのパターンは、特にデータが興味深い方法で並べ替えられている場合に、トランザクションまたは製品の興味深い部分を明らかにするのに役立ちます。たとえば、トランザクションが日付順に並べ替えられている場合、黒い四角のパターンは、人々が購入する製品の数量またはタイプが季節性によって影響を受けていることを明らかにする可能性があります。この視覚化は、セルが小さすぎて興味深いパターンを見つけられないため、非常に大きなトランザクション データセットでは意味がありません。

3. モデルのトレーニング

  1. 食料品ルール <- apriori(データ=食料品、パラメータ=リスト(サポート=、信頼度=、最小長さ=))

apriori() 関数の実行は簡単ですが、適切な数の関連ルールを生成するサポートおよび信頼度パラメータを見つけるには、かなりの試行錯誤が必要になる場合があります。

パラメータの設定が高すぎると、ルールがまったく生成されなかったり、ルールが一般的すぎてあまり役に立たなくなったりする可能性があります。一方、しきい値が低すぎると、ルールの数が多くなり、実行に長い時間がかかったり、学習フェーズ中にメモリが不足したりする可能性があります。

aprior() 関数は、デフォルトでサポート = 0.1、信頼度 = 0.8 を設定します。ただし、デフォルト設定ではルールを取得できません。

  1. > apriori(食料品)
  2. セット  0 個ルール # サポート = 0.1 なので、その製品は少なくとも 0.1 * 9835 = 983.5 個のトランザクションに出現する必要があることを意味します。前回の分析では、サポート >= 0.1 の製品は 8 個だけであることがわかったので、デフォルト設定を使用してルールが生成されないのは当然です。

サポート設定問題を解決する 1 つの方法は、興味深いパターンを検討する前に、必要なトランザクションの最小数について考えることです。たとえば、製品が 1 日に 2 回購入される場合、1 か月で 60 件のトランザクション レコードがあると想定できます。これが、私たちが関心のあるものである可能性があります。これに基づいて、必要なサポートを計算できます。サポート = 60/9835 = 0.006。

信頼度について: 信頼度が低すぎると、信頼できないルールが多数出現して圧倒される可能性があります。信頼度が高すぎると、明らかなルールが多数出現して、興味深いパターンを見つけることが不可能になる可能性があります。適切な信頼度レベルの選択は、分析の目的によって異なります。保守的な値から始めることができます。実行可能なルールがないことがわかった場合は、信頼度を下げてルールの検索範囲を広げることができます。

この例では、信頼度レベル 0.25 から開始します。つまり、ルールが結果に含まれるためには、少なくとも 25% の確率で正しくなければなりません。これにより、最も信頼性の低いルールは除外されます。

minlen = 2 は、ルールに少なくとも 2 つの製品が含まれていることを意味します。これにより、特定の製品が頻繁に購入されるという理由だけで、役に立たないルールが作成されることを防ぐことができます。たとえば、上記の分析では、全乳の確率 (サポート) は 25.6% であることがわかりました。次のルールが出現する可能性があります: {}=>全乳、これは意味がありません。

最後に、上記の分析に基づいて、次のパラメータ設定を決定します。

  1. > 食料品ルール <- apriori(データ = 食料品、パラメータ = リスト(サポート = 0.006、信頼度 = 0.25、最小長さ = 2))
  2. >食料品のルール
  3. セット  463ルール

4. モデルのパフォーマンスを評価する

  1. > 要約(grocery_rules)
  2. セット  463ルール
  3.   
  4. ルールの長さの分布 (lhs + rhs):sizes # 前後の部分のルールの長さの分布
  5. 2 3 4
  6. 150 297 16 #2種類の商品のみを含むルールが150個、3種類の商品を含むルールが297個、4種類の商品を含むルールが16個あります。
  7.   
  8. 最小1 問目 中央値 平均値 3 問目最大値.
  9. 2.000 2.000 3.000 2.711 3.000 4.000
  10.   
  11. 品質測定概要:
  12. 自信の向上をサポート
  13. 最小:0.006101最小:0.2500最小:0.9932
  14. 1問目:0.007117 1問目:0.2971 1問目:1.6229
  15. 中央値:0.008744 中央値:0.3554 中央値:1.9332
  16. 平均:0.011539 平均:0.3786 平均:2.0351
  17. 3番目の質問:0.012303 3番目の質問:0.4495 3番目の質問:2.3565
  18. 最大:0.074835最大:0.6600最大:3.9565
  19.   
  20. 採掘情報:
  21. データnトランザクションは信頼性をサポートする
  22. 食料品 9835 0.006 0.25
  23. <br>>grocery_rules[1:5]を検査します
  24. lhs rhs サポート 自信 リフト
  25. 1 {鉢植え} => {全乳} 0.006914082 0.4000000 1.565460
  26. 2 {パスタ} => {全乳} 0.006100661 0.4054054 1.586614
  27. 3 {ハーブ} => {根菜} 0.007015760 0.4312500 3.956477
  28. 4 {ハーブ} => {その他の野菜} 0.007727504 0.4750000 2.454874
  29. 5 {ハーブ} => {全乳} 0.007727504 0.4750000 1.858983

ここで、一般的な購入率と比較して商品が購入される可能性を測る指標であるリフトについて説明する必要があります。簡単に言えば、たとえば、最初のルール {鉢植え} => {全乳}、リフト = 1.565 は、(鉢植えを購入した後に全乳を購入する確率) が (鉢植えを購入せずに全乳を購入する確率) の 1.565 倍であることを意味します。

最初のルールの解釈: 顧客が鉢植えを購入する場合、全乳も購入します。サポートは 0.0070、信頼度は 0.4000 です。このルールはトランザクションの約 0.7% をカバーし、鉢植えを購入した後に全乳を購入する確率は 40% であると判断できます。リフト値は 1.565 で、全乳を購入する確率は鉢植えを購入しない顧客の 1.565 倍高いことを示しています。上記の分析から、顧客の 25.6% が全乳を購入することがわかっているため、計算されたリフトは 0.40/0.256=1.56 となり、表示された結果と一致します。注: サポートでマークされた列はルールのサポートを表し、前提 (左辺) または結果 (右辺) のサポートを表しません。

揚力は、lift(X → Y) = P (Y| X) / P (Y)であり、lift(X → Y)はlift(Y → X)と同じです。

リフト値が 1 より大きい場合、2 つの商品カテゴリが、どちらか一方だけを購入するよりも、一緒に購入されることが多いことを意味します。リフト値が大きいということは、ルールが重要であり、項目間の実際のつながりを反映していることを示す重要な指標です。

5. モデルのパフォーマンスを向上させる

(1)相関ルールセットのソート

マーケット バスケット分析の目的に応じて、サポート、信頼度、リフトが高いルールが最も役立つ場合があります。 arules パッケージには、by パラメータを「support」、「confidence」、または「lift」として指定することでルールのリストを並べ替える sort() 関数が含まれています。 デフォルトでは、ソートは降順です。パラメータ decline=FALSE を指定すると、ソート順を逆にすることができます。

  1. > 検査(ソート(grocery_rules、 by = "lift" )[1:10])
  2. lhs rhs サポート 自信 リフト
  3. 3 {ハーブ} => {根菜} 0.007015760 0.4312500 3.956477
  4. 57 {ベリー} => {ホイップクリーム/サワークリーム} 0.009049314 0.2721713 3.796886
  5. 450 {トロピカルフルーツ、その他の野菜、全乳} => {根菜} 0.007015760 0.4107143 3.768074
  6. 174 {牛肉、その他の野菜} => {根菜類} 0.007930859 0.4020619 3.688692
  7. 285 {熱帯果実、その他の野菜} => {有核果実} 0.009456024 0.2634561 3.482649
  8. 176 {牛肉、全乳} => {根菜類} 0.008032537 0.3779904 3.467851
  9. 284 {有核果物、その他の野菜} => {熱帯果物} 0.009456024 0.3618677 3.448613
  10. 282 {果実、ヨーグルト} => {トロピカルフルーツ} 0.006405694 0.3559322 3.392048
  11. 319 {柑橘類、その他の野菜} => {根菜類} 0.010371124 0.3591549 3.295045
  12. 455 {その他の野菜、全乳、ヨーグルト} => {トロピカルフルーツ} 0.007625826 0.3424658 3.263712

(2)関連ルールのサブセットの抽出:subset()関数を使用して、興味のあるルールを抽出できます。

  1. > fruit_rules <- subset(grocery_rules,items % in % "pip fruit" ) # items はルール内のどこにでも出現するアイテムに一致することを意味します。サブセットを左側または右側のみに一致するように制限するには、代わりに lhs または rhs を使用します。
  2. > フルーツルール
  3. セット  21ルール
  4. > 検査(フルーツルール[1:5])
  5. lhs rhs サポート 自信 リフト
  6. 127 {有核果実} => {トロピカルフルーツ} 0.020437214 0.2701613 2.574648
  7. 128 {種実果実} => {その他の野菜} 0.026131164 0.3454301 1.785237
  8. 129 {種なしの果物} => {全乳} 0.030096594 0.3978495 1.557043
  9. 281 {トロピカルフルーツ、有核フルーツ} => {ヨーグルト} 0.006405694 0.3134328 2.246802
  10. 282 {果実、ヨーグルト} => {トロピカルフルーツ} 0.006405694 0.3559322 3.392048

上記は、R 言語アドオン パッケージ arules に実装されている apriori アルゴリズムを使用した関連ルール マイニングのアプリケーションです。ぜひご連絡ください。

<<:  18年経った今、マイクロソフトの自然言語処理技術はどうなっているのでしょうか?

>>:  スタートアップにハイエンド AI を実装するにはどうすればよいでしょうか?

ブログ    
ブログ    

推薦する

解釈可能な機械学習のための Python ライブラリ

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

休日のAI本リスト:人工知能をしっかり学びたいなら、まずはこの6冊から始めましょう〜

諺にあるように、何千冊もの本を読むことは何千マイルも旅をすることと同じです。休暇中に本を読まないわけ...

人工知能にあなたのお金を管理させてみませんか?

「知識が不足していると、心配しすぎてしまいます。」この文章は、賢明な投資アドバイスの良い注釈です。...

スマート製造を活用して持続可能な工場フロアを構築するにはどうすればよいでしょうか?

自動車メーカーは、施設を近代化し、事業運営をより持続可能にするために、スマート製造戦略を採用していま...

673本の論文を要約し、UIUCなどが20ヶ月で完成させた信頼性の高い機械学習レビューを発表

少し前、UIUC と南洋理工大学の 3 人の研究者が 20 か月かけて 673 本の論文を研究し、信...

ブラックホールの中には何があるのでしょうか?物理学者は量子コンピューティングと機械学習を使って

BGRによると、PRX Quantum誌に最近発表された研究では、ブラックホール内部をさらに詳しく調...

知っておくべきビッグデータ用語 75 選

パート1(25用語)ビッグデータに不慣れな場合、この分野を理解したり、どこから始めればよいのかわから...

ブロックチェーン技術を活用してディープフェイク動画の脅威に対抗する方法

デジタル革新が主流の時代において、ディープフェイク動画の増加は広く懸念されるようになっている。ディー...

AI時代のセキュリティ情勢にはどのような新たな変化が起こっているのでしょうか?

近年、世界の人工知能産業は急速な発展の勢いを見せており、セキュリティ状況はますます複雑になっています...

...

テクノロジーファイナンスからスマートファイナンスまで、民生銀行の革新的な人工知能の応用をご覧ください

[51CTO.comからのオリジナル記事] 「インターネット+」から「インテリジェンス+」まで、革新...

産業用ロボットは2021年に44.9%成長し、2022年の成長率は低下すると予想されている

産業用ロボットの年間成長率は44.9%でしたが、累積成長率は月ごとに低下しました。 Windのデータ...

YouTube 動画推奨アルゴリズムを破る方法

[[176814]]映画、ドラマ、テレビ番組、オンライン ビデオなどの配信チャネルのコンテンツ ワー...

...