相関ルールのユースケース・シナリオ
人気映画レンタルWebサイトが更新されています。映画レンタル会社は、頻繁にレンタルされる映画や購入取引履歴に基づいて、顧客に映画をお薦めしようと考えています。映画のお薦めに協力するよう、データ・サイエンティストであるあなたに打診しています。Aprioriアルゴリズムを使用して、よく一緒に視聴される人気映画を分析することでこの問題を解決します。
関連コンテンツ
| トピック | リンク | 
|---|---|
| OML4SQL GitHubの例 | Apriori - 相関ルール | 
| CREATE_MODEL2プロシージャ | CREATE_MODEL2プロシージャ | 
| 一般的なモデル設定 | DBMS_DATA_MINING - モデル設定 | 
| Apriori設定 | DBMS_DATA_MINING - 機械学習機能の設定 | 
| データ・ディクショナリ設定 | Oracle Machine Learningのデータ・ディクショナリ・ビュー | 
| 関連ルール - モデル・ディテール・ビュー | |
| 相関について | 相関について | 
| Aprioriについて | Aprioriについて | 
OML4SQLユースケースの探求を開始する前に、次の用意ができていることを確認します。
- データ・セット
                        このユースケースに使用されるデータ・セットは、MovieStreamデータ・セットという名前です。ノート: このデータ・セットは、説明の目的でのみ使用されます。
- データベース 
                        次のオプションからデータベースを選択または作成します:- 無償のクラウド・アカウントを取得します。https://cloud.oracle.com/databaseにアクセスし、「Oracle Database Cloud Service (DBCS)」または「Oracle Autonomous Database」を選択します。アカウントを作成してインスタンスを作成します。Autonomous Databaseクイック・スタート・ワークショップを参照してください。
- Oracle Database (オンプレミス)の最新バージョンをダウンロードします。
 
- 機械学習ツール
                        データベースの選択内容に応じて、次のいずれかを実行します。- Oracle Autonomous Database用のOML Notebooksを使用します。
- オンプレミス・データベースまたはDBCSに接続されたOracle SQL Developerをインストールして使用します。SQL Developerのインストールおよび起動を参照してください。
 
- その他の要件
                        データ・マイニング権限(ADWに対して自動的に設定されます)。Oracle Machine Learning for SQLのためのシステム権限を参照してください。 
データのロード
データ・セットとその属性を詳細に調べます。データをデータベースにロードします。
このユースケースでは、データ・セットをデータベースにロードします。Oracle Autonomous Databaseを使用している場合は、Oracle Cloud Infrastructure (OCI) Object Storage内の既存のデータ・ファイルを使用します。サンプル表を作成し、OCI Object Storage内のファイルからサンプル表にデータをロードし、そのデータを確認します。オンプレミス・データベースを使用している場合は、Oracle SQL Developerを使用してデータ・セットをインポートし、データを探索します。
- データにアクセスします。
- データ・セットの様々な属性または列を詳細に調べます。
- データ品質を(データを探索することで)評価します。
データの調査
次の表では、MOVIES_SALES_FACT内の属性について情報を示します。
                     
| 属性名 | 情報 | 
|---|---|
| ORDER_NUM | オーダー番号を指定します | 
| ACTUAL_PRICE | 映画の実際の価格を指定します | 
| AGE | 顧客の年齢を指定します | 
| AGE_BAND | 顧客の年齢層を指定します指定可能な値は、20-29、30-39、40-49、50-59、60-69、70-79、80-89などです。 | 
| APP | その映画に使用するアプリケーションを指定します | 
| CITY | 市区町村の名前を指定します | 
| CITY_ID | 市区町村IDを指定します | 
| COMMUTE_DISTANCE | 通勤距離を指定します | 
| COMMUTE_DISTANCE_BAND | 通勤距離区分を指定します | 
| CONTINENT | 大陸名を指定します | 
| COUNTRY | 国名を指定します | 
| COUNTRY_CODE | 国コードを指定します | 
| COUNTRY_ID | 国IDを指定します | 
| CREDIT_BALANCE | 顧客の預金残高を指定します | 
| CUSTOMER_ID | 顧客IDを指定します | 
| CUSTOMER_NAME | 顧客名を指定します | 
| DAY | 曜日を YYYY-mm-dd hh:mm:ss形式で指定します | 
| DAY_NAME | 曜日を指定します | 
| DAY_NUM_OF_WEEK | 曜日番号を指定します | 
| DEVICE | 顧客が使用するデバイスの情報を指定します | 
| DISCOUNT_PERCENT | 割引率を指定します | 
| DISCOUNT_TYPE | 顧客が利用可能な割引タイプを指定します。指定可能な値は、紹介、クーポン、「プロモーション」、「ボリューム」、「なし」です | 
| EDUCATION | 顧客の教育課程を指定します | 
| EMAIL | 顧客のEメールIDを指定します | 
| FULL_TIME | 顧客の雇用形態(フルタイム、雇用なし、パートタイムなど)を指定します | 
| GENDER | 顧客の性別を指定します | 
| GENRE | 映画のジャンルを指定します | 
| HOUSEHOLD_SIZE | 顧客の世帯規模を指定します | 
| HOUSEHOLD_SIZE_BAND | 世帯規模層を指定します | 
| INCOME | 顧客の所得を指定します | 
| INCOME_BAND | 顧客の所得層を指定します | 
| INSUFF_FUNDS_INCIDENTS | 顧客のこれまでの残高不足インシデントの数を指定します | 
| JOB_TYPE | 顧客の職業を指定します | 
| LATE_MORT_RENT_PMTS | 顧客に住宅ローン返済または賃貸料支払いの遅延があったことを指定します | 
| LIST_PRICE | 映画の定価を指定します | 
| MARITAL_STATUS | 顧客の配偶者の有無を指定します | 
| MONTH | 月を MON-YYYY形式で指定します | 
| MONTH_NAME | 月を指定します。たとえば、「1月」です。 | 
| MONTH_NUM_OF_YEAR | 月番号を指定します | 
| MORTGAGE_AMT | 住宅ローン金額を指定します | 
| MOVIE_ID | 映画IDを指定します | 
| NUM_CARS | 顧客が所有する車の台数を指定します | 
| NUM_MORTGAGES | 住宅ローンの数を指定します | 
| OS | OS情報を指定します | 
| PAYMENT_METHOD | 支払方法を指定します | 
| PET | 顧客がペットを所有しているかどうかを指定します | 
| POSTAL_CODE | 住所の郵便番号を指定します | 
| PROMOTION_RESPONSE | プロモーション・オファーに対する顧客の回答を指定します | 
| QUANTITY_SOLD | 販売した数量を指定します | 
| QUARTER_NAME | 四半期名を Qn-YYYY形式で指定します。たとえば、「Q1-2001」です。 | 
| QUARTER_NUM_OF_YEAR | 四半期番号を指定します | 
| RENT_OWN | 顧客の住居が賃貸か所有かを指定します | 
| SEARCH_GENRE | 検索した映画のジャンルを指定します | 
| SEGMENT_DESCRIPTION | 人口区分を説明します | 
| SEGMENT_NAME | 人口区分名を指定します | 
| SKU | SKU IDを指定します | 
| STATE_PROVINCE | 都道府県を指定します | 
| STATE_PROVINCE_ID | 都道府県IDを指定します | 
| STREET_ADDRESS | 顧客の住所を指定します | 
| TITLE | 映画のタイトルを指定します | 
| USERNAME | 顧客から提供されたユーザー名を指定します | 
| WORK_EXPERIENCE | 顧客の職歴を指定します | 
| WORK_EXPERIENCE_BAND | 顧客の職歴区分を指定します | 
| YEAR | 年を指定します | 
| YEARS_CURRENT_EMPLOYER | 顧客の現在の雇用主を指定します | 
| YEARS_CURRENT_EMPLOYER_BAND | 現在の雇用主との顧客の雇用区分を年単位で指定します | 
| YEARS_RESIDENCE | 顧客がその住所に居住している年数を指定します | 
| YEARS_RESIDENCE_BAND | 居住区分を指定します | 
表の作成
MOVIE_SALES_FACTという表を作成します。この表は、DBMS_CLOUD.COPY_DATAプロシージャでデータ・セットにアクセスするために使用されます。 
                     
OML Notebooksに次のコードを入力し、ノートブックを実行します。
%sql
CREATE TABLE MOVIE_SALES_FACT
( ORDER_NUM NUMBER(38,0),
 DAY DATE,
 DAY_NUM_OF_WEEK NUMBER(38,0),
 DAY_NAME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 MONTH VARCHAR2(12 BYTE) COLLATE USING_NLS_COMP,
 MONTH_NUM_OF_YEAR NUMBER(38,0),
 MONTH_NAME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 QUARTER_NAME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 QUARTER_NUM_OF_YEAR NUMBER(38,0),
 YEAR NUMBER(38,0),
 CUSTOMER_ID NUMBER(38,0),
 USERNAME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 CUSTOMER_NAME VARCHAR2(250 BYTE) COLLATE USING_NLS_COMP,
 STREET_ADDRESS VARCHAR2(250 BYTE) COLLATE USING_NLS_COMP,
 POSTAL_CODE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 CITY_ID NUMBER(38,0),
 CITY VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 STATE_PROVINCE_ID NUMBER(38,0),
 STATE_PROVINCE VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 COUNTRY_ID NUMBER(38,0),
 COUNTRY VARCHAR2(126 BYTE) COLLATE USING_NLS_COMP,
 COUNTRY_CODE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 CONTINENT VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 SEGMENT_NAME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 SEGMENT_DESCRIPTION VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 CREDIT_BALANCE NUMBER(38,0),
 EDUCATION VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 EMAIL VARCHAR2(128 BYTE) COLLATE USING_NLS_COMP,
 FULL_TIME VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 GENDER VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 HOUSEHOLD_SIZE NUMBER(38,0),
 HOUSEHOLD_SIZE_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 WORK_EXPERIENCE NUMBER(38,0),
 WORK_EXPERIENCE_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 INSUFF_FUNDS_INCIDENTS NUMBER(38,0),
 JOB_TYPE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 LATE_MORT_RENT_PMTS NUMBER(38,0),
 MARITAL_STATUS VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 MORTGAGE_AMT NUMBER(38,0),
 NUM_CARS NUMBER(38,0),
 NUM_MORTGAGES NUMBER(38,0),
 PET VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 PROMOTION_RESPONSE NUMBER(38,0),
 RENT_OWN VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 YEARS_CURRENT_EMPLOYER NUMBER(38,0),
 YEARS_CURRENT_EMPLOYER_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 YEARS_CUSTOMER NUMBER(38,0),
 YEARS_CUSTOMER_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 YEARS_RESIDENCE NUMBER(38,0),
 YEARS_RESIDENCE_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 AGE NUMBER(38,0),
 AGE_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 COMMUTE_DISTANCE NUMBER(38,0),
 COMMUTE_DISTANCE_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 INCOME NUMBER(38,0),
 INCOME_BAND VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 MOVIE_ID NUMBER(38,0),
 SEARCH_GENRE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 TITLE VARCHAR2(4000 BYTE) COLLATE USING_NLS_COMP,
 GENRE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 SKU NUMBER(38,0),
 LIST_PRICE NUMBER(38,2),
 APP VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 DEVICE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 OS VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 PAYMENT_METHOD VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 DISCOUNT_TYPE VARCHAR2(26 BYTE) COLLATE USING_NLS_COMP,
 DISCOUNT_PERCENT NUMBER(38,1),
 ACTUAL_PRICE NUMBER(38,2),
 QUANTITY_SOLD NUMBER(38,0)
 )
;表へのデータのロード
オブジェクト・ストレージに格納されているデータ・セットをMOVIE_SALES_FACT表にロードします。
                     
このデータをロードする前に、「コンピュート・リソース」を「中」または「高」に設定してください。「高」を選択した場合は、高リソース・サービスの「メモリー」フィールドを16に設定します。メモリー設定を構成するには、管理者権限が必要です。コンピュート・リソースを参照してください。
                        
%script
BEGIN
 DBMS_CLOUD.COPY_DATA (table_name => 'MOVIE_SALES_FACT',file_uri_list => 'https://objectstorage.uk-london-1.oraclecloud.com/n/adwc4pm/b/moviestream_kl/o/d801_movie_sales_fact_m-*.csv', format => '{"delimiter":",", "recorddelimiter":"newline", "skipheaders":"1", "quote":"\\\"", "rejectlimit":"1000", "trimspaces":"rtrim", "ignoreblanklines":"false", "ignoremissingcolumns":"true", "dateformat":"DD-MON-YYYY HH24:MI:SS"}');
END;
/
 
PL/SQL procedure successfully completed.
 
 
---------------------------- table_name: ターゲット表の名前です。
- credential_name: すでに作成した資格証明の名前です。
- file_uri_list: ロードするソース・ファイルのカンマ区切りリストです。ファイル- d801_movie_sales_fact_m-*.csv内の特殊文字- *は、2018年から2020年までの販売データを含むMovieStreamデータ・セットを一括ロードすることを意味します。
- format: ファイル・タイプがテキスト、ORC、ParquetまたはAvroのいずれであるかなど、ソース・ファイルの形式を記述するために指定できるオプションを定義します。- delimiter: フィールド・デリミタ(特殊文字)を指定します。ここでは、「,」(カンマ)と指定します。
- recorddelimiter: レコード・デリミタを指定します。デフォルト値は- newlineです。デフォルトでは、- DBMS_CLOUDは、デリミタとして適切な改行文字を自動的に見つけようとします。
- skipheaders: ファイルの先頭からスキップする行数を指定します。このユースケースでは、- 1です。
- quote:フィールドの引用符文字を指定します。
- rejectlimit: 操作は、指定した数の行が拒否されるとエラーになります。ここでの値は- 1000です。
- trimspaces: フィールドの先頭と末尾の空白を切り捨てる方法を指定します。ここでは、- rtrimです。- rtrim値の指定は、末尾の空白を切り捨てることを示します。
- ignoreblanklines: trueに設定すると、空白行は無視されます。デフォルト値は- falseです。
- ignoremissingcolumns:- field_list内の列がソース・ファイル内の列より多い場合に、余分な列をNULLとして格納します。デフォルト値は- falseです。このユースケースでは、- trueに設定します。
- dateformat: ソース・ファイル内の日付書式を指定します。
 
この例では、adwc4pmはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースであり、moviestream_klはバケット名です。
関連トピック
データの探索
データが表にロードされたら、データを確認し、データの品質を把握して評価します。このステージでは、データを評価してデータ内のデータ型およびノイズを識別します。欠損値および数値外れ値を探します。
データ品質の評価
データを評価するには、まずデータベース内のデータを表示できる必要があります。このため、SQL文を使用して表を問い合せます。
Oracle Autonomous Databaseを使用している場合は、データ品質の評価など、データ・サイエンス・プロジェクトのためにOracle Machine Learning (OML) Notebooksを使用できます。オンプレミスOracle Databaseを使用している場合は、Oracle SQL Developerを使用してデータ品質を評価できます。説明に従ってデータを問い合せます。
ノート:
データベース内の各レコードはケースと呼ばれ、各ケースはcase_idで識別されます。このユースケースでは、CUSTOMER_IDがcase_idです。
                     次のステップは、データの探索的分析に役立ちます。
これで、データの探索ステージが完了します。OMLでは、自動データ準備(ADP)をサポートしています。ADPはモデル設定によって有効になります。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、モデルに埋め込まれます。このステップは、モデルの構築ステージで実行します。一般的に使用されるデータの準備方法には、ビニング、正規化、欠損値の処理があります。
関連トピック
モデルの構築
データ・セットを使用してモデルを構築します。DBMS_DATA_MINING.CREATE_MODEL2プロシージャを使用してモデルを構築し、モデル設定を指定します。 
                  
相関ルールなどの教師なし学習の場合、精度を計算するためやパフォーマンスを評価するためのラベルまたは予測子がありません。したがって、別個のトレーニング・データ・セットでモデルをトレーニングしてからテスト・セットでそれを評価する必要はありません。データ・セット全体を使用してモデルを構築できます。教師なし学習の場合、モデルを評価する客観的方法はありません。そのため、トレーニングやテスト分割は有用ではありません。
アルゴリズムの選択
Oracleでは、相関ルール・モデルを構築するためのAprioriアルゴリズムがサポートされています。
Aprioriは、高頻度項目セット内で、ある項目が、別のある項目また項目グループが存在する場合に存在する確率を計算します。項目セットとは、トランザクション内の2つ以上の項目のあらゆる組合せのことです。高頻度項目セットとは、ユーザーが指定した最小頻度で発生する項目セットのことです。相関ルールにより、ある項目または項目グループの存在が、ある確率および支持度での別のある項目の存在を暗に示すことを表します。
次のステップでは、Aprioriアルゴリズムを使用してモデルを構築する方法について説明します。
評価
診断メトリックを表示し、品質チェックを実行してモデルを評価します。
ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せれば、モデルのパフォーマンスを測定するのに十分な場合もあります。ただし、平均絶対誤差(MAE)、二乗平均平方根誤差(RMSE)、混同行列、リフト統計、コスト行列などのテスト・メトリックを計算して、モデルを評価できます。相関ルールの場合、様々なルールを調査して、それらによって項目の依存関係(前件の項目セットが後件を暗に示す)または項目間の想定外の関係について新しいインサイトが明らかになるかどうかを確認できます。
ディクショナリ・ビューおよびモデル・ビュー
モデルおよびビュー・モデル設定に関する情報を取得するには、データ・ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せることができます。モデル・ディテール・ビューの特定のビューには、モデルの評価に役立つモデル統計が表示されます。
相関モデルの結果は、データ内の相関のパターンを識別するルールです。Oracle Machine Learning for SQLでは、相関モデルのスコアリング操作はサポートされていません。かわりに、支持度と信頼度が、このモデルで生成されるルールの質を評価するための主要なメトリックとなります。これらの統計上の測度は、ルールのランク付けに使用できるので予測に役立ちます。
相関ルールは次のように適用できます。
- 支持度: 相関ルールの適用時にデータ内でこれらの項目が一緒に発生する頻度。
- 信頼度: 前件を含むトランザクション内で後件が発生する頻度。
- 値: 項目相関に結び付けられるビジネス価値の大きさ
また、Oracle Machine Learning for SQLは相関ルールのリフトもサポートしています。リフトは、それぞれの支持度を持つ前件と後件のランダムな同時発生に対するルールの強度を示します。リフトにより、改良度(前件を前提とする後件の確率の増加)に関する情報が得られます。リフトは、後件の支持度で除算した項目の組合せの信頼度として定義されます。改良度が1未満のルールでは、偶然以上に購入を確実に予測できないため、支持度と信頼度が高くても、実際の組合せ購入の確率は示されません。
次の表に、Oracle Machine Learningのデータ・ディクショナリ・ビューを示します。ビューのデータベース管理者(DBA)およびUSERバージョンも使用可能です。
| ビュー名 | 説明 | 
|---|---|
| ALL_MINING_MODELS | アクセス可能なすべての機械学習モデルに関する情報を示します | 
| ALL_MINING_MODEL_ATTRIBUTES | アクセス可能なすべての機械学習モデルの属性に関する情報を示します | 
| ALL_MINING_MODEL_SETTINGS | アクセス可能なすべての機械学習モデルの構成設定に関する情報を示します | 
| ALL_MINING_MODEL_VIEWS | アクセス可能なすべての機械学習モデルのモデル・ビューに関する情報を示します | 
| ALL_MINING_MODEL_XFORMS | アクセス可能なすべての機械学習モデルに埋め込まれたユーザー指定の変換を示します。 | 
モデル・ディテール・ビューはアルゴリズムに固有です。モデル・ディテール・ビューを表示することで、作成したモデルに関する詳細なインサイトを取得できます。モデル・ディテール・ビューの名前はDM$xxで始まります(xxはビュー接頭辞に相当します)。「モデル・ディテール・ビュー」を参照してください。












