小売商品の価格の最適化

1. はじめに

最終更新日: 2021 年 9 月 15 日

価格の分析情報と最適化を推進するために必要なデータは本質的に異なる(異なるシステム、異なる地域の実情など)ため、適切に構造化され、標準化されたクリーンな CDM テーブルを開発することが重要です。これには、トランザクション、商品、価格、顧客など、価格を最適化するための主要な属性が含まれます。このドキュメントでは、以下で説明する手順について説明します。ここでは、料金分析を自分のニーズに合わせて拡張およびカスタマイズできるクイック スタートについて説明します。次の図は、このドキュメントで説明する手順の概要を示しています。

dd8545e0c9156b13.png

  1. データソースを評価する: まず、CDM の作成に使用するデータソースのインベントリを取得する必要があります。このステップでは、Dataprep を使用して入力データから問題の探索と識別も行います。たとえば、値の欠落や不一致、命名規則の不一致、重複、データの整合性の問題、外れ値などです。
  2. データの標準化: 次に、データの精度、整合性、整合性、完全性を確保するために、これまでに特定された問題を修正します。このプロセスには、日付形式、値の標準化、単位変換、不要なフィールドと値の除外、ソースデータの分割、結合、重複除去など、さまざまな Dataprep での変換が含まれます。
  3. 1 つの構造に統合: パイプラインの次のステージでは、各データソースを BigQuery 内の 1 つの幅の広いテーブルに結合し、すべての属性を細かい粒度で結合します。この非正規化された構造により、結合を必要としない効率的な分析クエリが可能になります。
  4. 分析とML/AI: データをクリーンアップして分析用にフォーマットしたら、アナリストは過去のデータを探索して以前の料金変更の影響を理解できます。さらに、BigQuery ML を使用して、将来の売上を予測する予測モデルを作成できます。これらのモデルの出力を Looker 内のダッシュボードに組み込んで、「What-If シナリオ」を作成できます。特定の価格変更があった場合の売り上げがどうなるか、ビジネス ユーザーが分析できます。

次の図は、料金最適化分析パイプラインの構築に使用される Google Cloud コンポーネントを示しています。

e5d74e43074eedf4.png

作成するアプリの概要

ここでは、価格を最適化するデータ ウェアハウスの設計方法、時間の経過に伴ってデータ準備を自動化する方法、ML を使用してプロダクト価格の変更による影響を予測する方法、行動につながるインサイトをチームに提供するためのレポートを作成する方法を紹介します。

学習内容

  • Dataprep を料金分析用のデータソースに接続する方法。このデータソースは、リレーショナル データベース、フラット ファイル、Google スプレッドシート、その他のサポートされているアプリケーションに保存できます。
  • BigQuery データ ウェアハウスに CDM テーブルを作成するための Dataprep フローを構築する方法。
  • BigQuery ML を使用して将来の収益を予測する方法。
  • Looker でレポートを作成して過去の価格と販売の傾向を分析し、将来の価格変更の影響を理解する方法。

必要なもの

2. BigQuery で CDM を作成する

このセクションでは、共通データモデル(CDM)を作成します。CDM は、分析と料金変更の提案に必要な情報をまとめた統合ビューを提供します。

  1. BigQuery コンソールを開きます。
  2. このリファレンス パターンのテストに使用するプロジェクトを選択します。
  3. 既存のデータセットを使用するか、BigQuery データセットを作成します。データセットに Pricing_CDM という名前を付けます。
  4. テーブルを作成します。
create table `CDM_Pricing`
(
  Fiscal_Date DATETIME,
  Product_ID STRING,
  Client_ID INT64,
  Customer_Hierarchy STRING,
  Division STRING,
  Market STRING,
  Channel STRING,
  Customer_code INT64,
  Customer_Long_Description STRING,
  Key_Account_Manager INT64,
  Key_Account_Manager_Description STRING,
  Structure STRING,
  Invoiced_quantity_in_Pieces FLOAT64,
  Gross_Sales FLOAT64,
  Trade_Budget_Costs FLOAT64,
  Cash_Discounts_and_other_Sales_Deductions INT64,
  Net_Sales FLOAT64,
  Variable_Production_Costs_STD FLOAT64,
  Fixed_Production_Costs_STD FLOAT64,
  Other_Cost_of_Sales INT64,
  Standard_Gross_Margin FLOAT64,
  Transportation_STD FLOAT64,
  Warehouse_STD FLOAT64,
  Gross_Margin_After_Logistics FLOAT64,
  List_Price_Converged FLOAT64
);

3. データソースを評価する

このチュートリアルでは、Google スプレッドシートBigQuery に保存されているサンプル データソースを使用します。

  • トランザクションごとに 1 行を含む transactions Google スプレッドシート。各商品の販売数量、総売上高、関連費用などの詳細情報が含まれます。
  • プロダクト料金 Google スプレッドシート。特定の顧客の各プロダクトの毎月の価格が含まれます。
  • 個々の顧客情報を含む company_descriptions BigQuery テーブル。

この company_descriptions BigQuery テーブルを作成するには、次のステートメントを使用します。

create table `Company_Descriptions`
(
 Customer_ID INT64,
 Customer_Long_Description STRING
);
insert into `Company_Descriptions` values (15458, 'ENELTEN');
insert into `Company_Descriptions` values (16080, 'NEW DEVICES CORP.');
insert into `Company_Descriptions` values (19913, 'ENELTENGAS');
insert into `Company_Descriptions` values (30108, 'CARTOON NT');
insert into `Company_Descriptions` values (32492, 'Thomas Ed Automobiles');

4. フローを構築する

このステップでは、サンプルの Dataprep フローをインポートします。このフローは、前のセクションでリスト したサンプル データセットの変換と統合に使用します。フローは、データセットとレシピを変換、結合するために使用されるパイプライン、つまりオブジェクトを表します。

  1. GitHup から価格設定最適化パターンのフロー パッケージをダウンロードしますが、解凍はしないでください。このファイルには、サンプルデータの変換に使用する価格最適化設計パターンのフローが含まれています。
  2. Dataprep で、左側のナビゲーション バーにあるフローアイコンをクリックします。次に、フロービューで、コンテキスト メニューから [Import] を選択します。インポートしたフローは、選択して表示、編集できます。

dd5213e4cf1e313f.png

  1. フローの左側で、商品価格と 3 つのトランザクションの Google スプレッドシートをそれぞれデータセットとして接続する必要があります。そのためには、Google スプレッドシートのデータセット オブジェクトを右クリックし、[置換] を選択します。[Import Datasets] リンクをクリックします。[経路を編集] をクリックします。鉛筆アイコンが表示されます。

7e4af3e82955343f.png

現在の値を Google スプレッドシートのトランザクション商品価格へのリンクに置き換えます。

Google スプレッドシートに複数のタブがある場合は、使用するタブをメニューから選択できます。[編集] をクリックして、データソースとして使用するタブを選択し、[保存]、[インポートとフローに追加します。モーダルに戻ったら、[置換] をクリックします。このフローでは、後のレシピで異なるソースを結合する例を示すために、各シートが独自のデータセットとして表されます。

799bce35e0a60e87.png

  1. BigQuery 出力テーブルを定義します。

このステップでは、Dataoprep ジョブを実行するたびに BigQuery の CDM_Pricing 出力テーブルが読み込まれるように、その場所を関連付けます。

フロービューで [Schema Mapping Output] アイコンをクリックし、[Details] パネルで [Destinations] タブをクリックします。そこで、テストで使用する [手動の送信先] の出力と、フロー全体を自動化する場合は [スケジュール設定された送信先] の出力を編集します。手順は次のとおりです。

  1. 「手動のリンク先」を編集する [詳細] パネルの [手動で設定したリンク先] セクションで、[編集] ボタンをクリックします。[Publishing Settings] ページの [Publishing Actions] で、公開操作がすでに存在する場合は [Edit] をクリックします。それ以外の場合は、[Add Action] ボタンをクリックします。そこから、前の手順で作成した Pricing_CDM データセットに BigQuery データセットに移動し、CDM_Pricing テーブルを選択します。[Append to this table every run] がオンになっていることを確認し、[Add] をクリックします。[Save Settings] をクリックします。
  2. [スケジュールされた宛先] を編集する

[詳細] パネルの [スケジュールされた宛先] セクションで、[編集] をクリックします。

この設定は手動のリンク先から継承されるため、変更する必要はありません。[設定を保存] をクリックします。

5. データの標準化

指定されたフローは、トランザクション データの結合、フォーマット、クリーニングを行い、その結果を会社の説明および集計価格のデータと結合して、レポートを作成します。ここでは、以下の画像に示すフローの各コンポーネントについて説明します。

a033de41c68acc8b.png

6. トランザクション データの使い方を学ぶ

まず、トランザクション データの準備に使用される Transactional Data Recipe 内で何が行われるのかを見ていきます。[Flow View] の [Transaction Data] オブジェクトをクリックし、[Details] パネルで [Edit Recipe] ボタンをクリックします。

Transformer ページが開き、詳細パネルにレシピが表示されます。レシピには、データに適用されるすべての変換ステップが含まれています。各ステップ間をクリックしてレシピ内を移動し、レシピ内の特定の位置にあるデータの状態を確認できます。

レシピの各ステップでその他メニューをクリックし、[Go to Selected] または [Edit it] を選択して、変換の仕組みを確認することもできます。

  1. UNION トランザクション: トランザクション データレシピの最初のステップでは、月ごとに異なるシートに保存されているトランザクションを統合します。
  2. 顧客の説明を標準化する: レシピの次のステップでは、顧客の説明を標準化します。これは、顧客名に若干の変更がある可能性があるため、名前と同じに正規化する必要があることを意味します。このレシピでは 2 つのアプローチが考えられます。まず、標準化アルゴリズムを利用します。このアルゴリズムは、「Similarstrings」などのさまざまな標準化オプションで構成できます。共通の文字を持つ値がクラスタ化されている、つまり「発音」類似した値がクラスタ化されますまたは、上記の BigQuery テーブルで会社 ID を使用して会社の説明を検索することもできます。

レシピをさらに進めて、データのクリーニングと書式設定に適用されているその他のさまざまな手法(行の削除、パターンに基づく書式設定、ルックアップによるデータ拡充、欠損値の処理、不要な文字の置換など)を確認できます。

7. 商品価格データレシピを見る

次に、準備されたトランザクション データを集計価格データに結合する、Product Pricing Data Recipe の処理内容を調べます。

ページの上部にある [価格設定の最適化の設計パターン] をクリックして Transformer ページを閉じ、フロービューに戻ります。そこから、[Product Pricing Data] オブジェクトをクリックしてレシピを編集します。

  1. 月額料金列のピボット解除: 2 ~ 3 ステップの間にあるレシピをクリックすると、アンピボット ステップ前のデータがどのように表示されるかを確認できます。データには、各月(1 月 2 月 3 月)の個別の列にトランザクション値が含まれています。これは、SQL で集計(合計、平均トランザクション)の計算を適用するのに便利な形式ではありません。各列が BigQuery テーブルの行になるように、データのピボットを解除する必要があります。このレシピでは unpivot 関数を利用して、3 つの列を毎月 1 行に変換するため、グループ計算をさらに簡単に適用できます。
  2. クライアント、商品、日付別の平均取引額を計算する: クライアント、商品、データごとに平均取引額を計算します。集計関数を使用して、新しいテーブルを生成します([新しいテーブルとしてグループ化] オプション)。その場合、データはグループレベルで集計され、個々のトランザクションの詳細が失われます。または、詳細と集計値の両方を同じデータセットに保持することもできます([新しい列としてグループ化] オプション)。これにより、比率(総収益に対する商品カテゴリの貢献度の割合)を簡単に適用できます。レシピのステップ 7 を編集して [新しいテーブルとしてグループ化] オプションを選択すると、この動作を試すことができます。または [新しい列としてグループ化]違いを確認します。
  3. 結合の料金日: 最後に結合を使用して、複数のデータセットを結合し、最初のデータセットに列を追加します。このステップでは、「Pricing Data.Product Code」に基づいて、料金データを Transactional Data Recipe の出力と結合します= Transaction Data.SKU」「Pricing Data.Price Date」= ‘Transaction Data.Fiscal Date’(取引データ.会計日')

Dataprep で適用できる変換の詳細については、Trifacta Data Wrangling Cheat Sheet をご覧ください。

8. スキーマ マッピング レシピを確認する

最後のレシピであるスキーマ マッピングでは、結果の CDM テーブルが既存の BigQuery 出力テーブルのスキーマと一致することを確認します。ここでは、ラピッド ターゲット 機能を使用して、ファジー一致を使用して BigQuery テーブルに合わせてデータ構造を再フォーマットし、両方のスキーマを比較して自動変更を適用します。

9. 1 つの構造に統合

送信元と宛先が設定され、フローの手順を確認できたので、CDM テーブルを変換して BigQuery に読み込むフローを実行できます。

  1. Run Schema Mapping の出力: フロービューでスキーマ マッピングの出力オブジェクトを選択し、[Run] をクリックします。[詳細] パネルで確認できます。[Trifacta Photon] を選択します[Running Environment] を選択し、[Ignore Recipe Updates] チェックボックスをオフにします。[実行] ボタンをクリックします。指定された BigQuery テーブルが存在する場合は、Dataprep によって新しい行が追加されます。存在しない場合は、新しいテーブルが作成されます。
  2. ジョブのステータスを表示する: Dataprep で [Run Job] ページが自動的に開くため、ジョブの実行をモニタリングできます。処理が完了し、BigQuery テーブルが読み込まれるまでに数分かかります。ジョブが完了すると、料金設定 CDM の出力が、分析可能なクリーンで構造化された正規化された形式で BigQuery に読み込まれます。

10. 分析とML/AI

アナリティクスの前提条件

なんらかの分析と予測モデルを実行して興味深い結果を得るため、特定の分析情報を発見できる、より大規模で関連性の高いデータセットを作成しました。このガイドを続ける前に、このデータを BigQuery データセットにアップロードする必要があります。

[+ テーブルを作成] ボタンをクリックして、次のパラメータを定義します。

  • アップロードからテーブルを作成し、CDM_Pricing_Large_Table.csv ファイルを選択します
  • スキーマの自動検出、スキーマと入力パラメータの確認
  • 詳細オプション、書き込み設定、テーブルを上書きする

ff9ec8b9f580b139.png

  • [テーブルを作成] をクリックします。

テーブルを作成してデータがアップロードされると、BigQuery の Google コンソールに、以下のように新しいテーブルの詳細が表示されます。BigQuery の料金データを使用すると、より包括的な質問を簡単に行って、料金データをさらに深く分析できます。

93e4c05972af1999.png

11. 料金変更による影響を確認する

分析対象の一つの例として、商品アイテムの価格を以前に変更した場合の注文動作の変化などが挙げられます。

  1. まず、商品の価格が変更されるたびに 1 行ずつ一時テーブルを作成します。このテーブルには、注文された商品数とその価格に関連付けられた純売上高など、その商品の価格に関する情報が含まれます。
create temp table price_changes as (
select
       product_id,
       list_price_converged,
       total_ordered_pieces,
       total_net_sales,
       first_price_date,
       lag(list_price_converged) over(partition by product_id order by first_price_date asc) as previous_list,
       lag(total_ordered_pieces) over(partition by product_id order by first_price_date asc) as previous_total_ordered_pieces,
       lag(total_net_sales) over(partition by product_id order by first_price_date asc) as previous_total_net_sales,
       lag(first_price_date) over(partition by product_id order by first_price_date asc) as previous_first_price_date
       from (
           select
               product_id,list_price_converged,sum(invoiced_quantity_in_pieces) as total_ordered_pieces, sum(net_sales) as total_net_sales, min(fiscal_date) as first_price_date
           from `{{my_project}}.{{my_dataset}}.CDM_Pricing` AS cdm_pricing
           group by 1,2
           order by 1, 2 asc
       )
);
select * from price_changes where previous_list is not null order by product_id, first_price_date desc

b320ba40f0692826.png

  1. この一時テーブルを使用して、SKU 間の平均価格の変化を計算します。
select avg((previous_list-list_price_converged)/nullif(previous_list,0))*100 as average_price_change from price_changes;
  1. 最後に、各価格の変更と、注文されたアイテムの総数の関係を確認することで、価格が変更された後の状況を分析できます。
select
(total_ordered_pieces-previous_total_ordered_pieces)/nullif(previous_total_ordered_pieces,0) 

as

price_changes_percent_ordered_change,
(list_price_converged-previous_list)/nullif(previous_list,0)  

as

price_changes_percent_price_change
from price_changes

12. 時系列予測モデルを構築する

次に、BigQuery の組み込みの ML 機能を使用して、ARIMA 時系列予測モデルを構築し、販売される各アイテムの数量を予測できます。

  1. まず、ARIMA_PLUS モデルを作成します
create or replace `{{my_project}}.{{my_dataset}}.bqml_arima`
options
 (model_type = 'ARIMA_PLUS',
  time_series_timestamp_col = 'fiscal_date',
  time_series_data_col = 'total_quantity',
  time_series_id_col = 'product_id',
  auto_arima = TRUE,
  data_frequency = 'AUTO_FREQUENCY',
  decompose_time_series = TRUE
 ) as
select
 fiscal_date,
 product_id,
 sum(invoiced_quantity_in_pieces) as total_quantity
from
 `{{my_project}}.{{my_dataset}}.CDM_Pricing` 
group by 1,2;
  1. 次に、ML.FORECAST 関数を使用して、各商品の将来の売上を予測します。
select
*
from
ML.FORECAST(model testing.bqml_arima,
            struct(30 as horizon, 0.8 as confidence_level));
  1. こうした予測を利用できることで、値上げした場合にどうなるかを理解できます。たとえば、すべての商品の価格を 15% 引き上げた場合、次のようなクエリを使用して翌月の推定合計収益を計算できます。
select
sum(forecast_value * list_price) as total_revenue
from ml.forecast(mode testing.bqml_arima,
            struct(30 as horizon, 0.8 as confidence_level)) forecasts
left join (select product_id,
                array_agg(list_price_converged
                       order by fiscal_date desc limit 1)[offset(0)] as list_price
                from `leigha-bq-dev.retail.cdm_pricing` group by 1)  recent_prices
using (product_id);

13. レポートを作成する

非正規化された料金データが BigQuery に一元化され、このデータに対して有意義なクエリを実行する方法を理解できたので、次はレポートを作成して、ビジネス ユーザーがこの情報を探索し、操作できるようにします。

Looker インスタンスがすでにある場合は、こちらの GitHub リポジトリにある LookML を使用して、このパターンの料金データの分析を開始できます。新しい Looker プロジェクトを作成して LookML を追加し、BigQuery の構成に合わせて各ビューファイルの接続名とテーブル名を置き換えるだけです。

このモデルでは、価格変更を調べるために前に示した派生テーブルこのビューファイル内)があります。

view: price_changes {
    derived_table: {
      sql: select
        product_id,
        list_price_converged,
        total_ordered_pieces,
        total_net_sales,
        first_price_date,
        lag(list_price_converged) over(partition by product_id order by first_price_date asc) as previous_list,
        lag(total_ordered_pieces) over(partition by product_id order by first_price_date asc) as previous_total_ordered_pieces,
        lag(total_net_sales) over(partition by product_id order by first_price_date asc) as previous_total_net_sales,
        lag(first_price_date) over(partition by product_id order by first_price_date asc) as previous_first_price_date
        from (
      select
         product_id,list_price_converged,sum(invoiced_quantity_in_pieces) as total_ordered_pieces, sum(net_sales) as total_net_sales, min(fiscal_date) as first_price_date
      from ${cdm_pricing.SQL_TABLE_NAME}  AS cdm_pricing
      group by 1,2
      order by 1, 2 asc
      )
       ;;
    }
...
}

前に示した BigQuery ML ARIMA モデルと同様に、将来の売上を予測します(こちらのビューファイルを参照)。

view: arima_model {
  derived_table: {
    persist_for: "24 hours"
    sql_create:
      create or replace model ${sql_table_name}
            options
              (model_type = 'arima_plus',
               time_series_timestamp_col = 'fiscal_date',
               time_series_data_col = 'total_quantity',
               time_series_id_col = 'product_id',
               auto_arima = true,
               data_frequency = 'auto_frequency',
               decompose_time_series = true
              ) as
            select
              fiscal_date,
              product_id,
              sum(invoiced_quantity_in_pieces) as total_quantity
            from
              ${cdm_pricing.sql_table_name}
            group by 1,2 ;;
          }
   }
...
}

LookML にはサンプル ダッシュボードも含まれています。ダッシュボードのデモバージョンにはこちらからアクセスできます。ダッシュボードの最初の部分には、売上、費用、価格、利益率の変化に関する概要情報が表示されます。ビジネス ユーザーの方は、売上が X% を下回った場合、値下げが必要になったことを知らせるアラートを作成できます。

b531e169b192c111.png

次のセクション(下図)では、料金改定に関する傾向を詳しく確認できます。ここでは、特定の商品を掘り下げて、正確な正規価格と変更後の価格を確認できます。これにより、特定の商品をピンポイントで特定し、詳しく調べることができます。

6a98666697aa7a1.gif

最後に、レポートの下部には BigQueryML モデルの結果が表示されます。Looker ダッシュボードの上部にあるフィルタを使用すると、パラメータを簡単に入力して、上記と同様のさまざまなシナリオをシミュレートできます。たとえば、以下のように、注文数が予測値の 75% に減少し、すべての商品の価格が 25% 引き上げられた場合の結果を確認します。

d3a9d37c89c39b99.gif

これは LookML のパラメータを利用しており、これらはこちらにある測定値の計算に直接組み込まれます。このタイプのレポートでは、すべての商品に最適な価格を判断したり、特定の商品の詳細を調べたりして、値上げや割引を行うべき箇所や、総収益と純収益に対する結果を判断できます。

14. 独自の価格設定システムに合わせる

このチュートリアルではサンプル データソースを変換していますが、さまざまなプラットフォームにある価格設定アセットに関してよく似たデータ課題に直面します。料金アセットには、要約と詳細な結果のためのさまざまなエクスポート形式(多くの場合、xls、スプレッドシート、csv、txt、リレーショナル データベース、ビジネス アプリケーション)があり、それぞれを Dataprep に接続できます。最初に、上記の例と同様に変換要件を記述することをおすすめします。仕様を明確にし、必要な変換の種類を特定したら、Dataprep を使用して変換を設計できます。

  1. カスタマイズする Dataprep フローのコピーを作成するか(フローの右側にある [**... [**more]] ボタンをクリックして [Duplicate] オプションを選択します)。または、新しい Dataprep フローを使用してゼロから作成します。
  2. 独自の料金データセットに接続します。Dataprep では、Excel、CSV、Google スプレッドシート、JSON などのファイル形式がネイティブにサポートされています。Dataprep コネクタを使用して他のシステムに接続することもできます。
  3. 特定したさまざまな変革カテゴリにデータアセットをディスパッチします。カテゴリごとに 1 つのレシピを作成します。この設計パターンで提供されるフローからインスピレーションを得て、データを変換し、独自のレシピを記述しましょう。行き詰まった場合でも心配はいりません。Dataprep 画面の左下にあるチャット ダイアログで助けを求めてください。
  4. レシピを BigQuery インスタンスに接続します。BigQuery でテーブルを手動で作成する必要はなく、Dataprep が自動的に処理します。フローに出力を追加するときは、手動の宛先を選択し、実行のたびにテーブルをドロップすることをおすすめします。期待する結果が得られるまで、各レシピを個別にテストします。テストが完了したら、以前のデータが削除されないように、実行のたびに出力を [テーブルに追加] に変換します。
  5. 必要に応じて、スケジュールどおりに実行するようにフローを関連付けることができます。これは、プロセスを継続的に実行する必要がある場合に役立ちます。必要な更新頻度に応じて、毎日または 1 時間ごとにレスポンスを読み込むようにスケジュールを定義できます。スケジュールに従ってフローを実行する場合は、各レシピのフローに Schedule Destination Output を追加する必要があります。

BigQuery ML モデルを変更する

このチュートリアルでは、サンプルの ARIMA モデルを使用します。ただし、モデルの開発時に制御できるパラメータが追加され、モデルがデータに最も適合するようにできます。詳しくは、こちらのドキュメント内の の例をご覧ください。また、BigQuery の ML.ARIMA_EVALUATEML.ARIMA_COEFFICIENTSML.EXPLAIN_FORECAST 関数を使用して、モデルの詳細を取得し、最適化に関する決定を行うことができます。

Looker レポートの編集

前述のように LookML を自分のプロジェクトにインポートすると、直接編集してフィールドの追加、計算やユーザー入力パラメータの変更、ビジネスニーズに合わせたダッシュボードのビジュアリゼーションの変更を行うことができます。詳しくは、LookML での開発Looker でのデータの可視化をご覧ください。

15. 完了

小売向けの商品を最適化するために必要な主な手順を学習しました料金

次のステップ

その他のスマート アナリティクスのリファレンス パターンを確認する

参考資料