私が現在受講しているコースでは、ダミーのトランザクション、顧客、製品のデータセットを構築して、ウェブショップ環境と財務ダッシュボードでの機械学習のユースケースを紹介しようとしています。残念ながら、ダミーデータは提供されていません。これは R の知識を向上させる良い方法だと思いましたが、それを実現するのに深刻な問題が発生しています。
アイデアは、いくつかのパラメーター/ルールを指定することです (任意/架空ですが、特定のクラスタリング アルゴリズムのデモンストレーションに適用できます)。私は基本的にパターンを非表示にして、機械学習を利用してこのパターンを再検索しようとしています(この質問の一部ではありません)。私が隠しているパターンは、製品導入のライフ サイクルに基づいており、ターゲットを絞ったマーケティングの目的で、さまざまな顧客タイプを特定する方法を示すことを試みています。
私が探しているものを示します。なるべくリアルに描きたいです。顧客ごとのトランザクション数やその他の特性を正規分布に割り当てることで、そうしようとしました。私はこれを行うための潜在的な他の方法を完全に受け入れていますか?
以下は私がどこまで来たかです。最初に顧客のテーブルを作成します。
# Define Customer Types & Respective probabilities
CustomerTypes <- c("EarlyAdopter","Pragmatists","Conservatives","Dealseekers")
PropCustTypes <- c(.10, .45, .30, .15) # Probability of being in each group.
set.seed(1) # Set seed to make reproducible
Customers <- data.frame(ID=(1:10000),
CustomerType = sample(CustomerTypes, size=10000,
replace=TRUE, prob=PropCustTypes),
NumBought = rnorm(10000,3,2) # Number of Transactions to Generate, open to alternative solutions?
)
Customers[Customers$Numbought<0]$NumBought <- 0 # Cap NumBought at 0
次に、選択する製品のテーブルを生成します。
Products <- data.frame(
ID=(1:50),
DateReleased = rep(as.Date("2012-12-12"),50)+rnorm(50,0,8000),
SuggestedPrice = rnorm(50, 50, 30))
Products[Products$SuggestedPrice<10,]$SuggestedPrice <- 10 # Cap ProductPrice at 10$
Products[Products$DateReleased<as.Date("2013-04-10"),]$DateReleased <- as.Date("2013-04-10") # Cap Releasedate to 1 year ago
ここで、現在関連している各変数の次のパラメーターに基づいて、n 個のトランザクションを生成したいと思います (番号は上記の顧客テーブルにあります)。
Parameters <- data.frame(
CustomerType= c("EarlyAdopter", "Pragmatists", "Conservatives", "Dealseeker"),
BySearchEngine = c(0.10, .40, 0.50, 0.6), # Probability of coming through channel X
ByDirectCustomer = c(0.60, .30, 0.15, 0.05),
ByPartnerBlog = c(0.30, .30, 0.35, 0.35),
Timeliness = c(1,6,12,12), # Average # of months between purchase & releasedate.
Discount = c(0,0,0.05,0.10), # Average Discount incurred when purchasing.
stringsAsFactors=FALSE)
Parameters
CustomerType BySearchEngine ByDirectCustomer ByPartnerBlog Timeliness Discount
1 EarlyAdopter 0.1 0.60 0.30 1 0.00
2 Pragmatists 0.4 0.30 0.30 6 0.00
3 Conservatives 0.5 0.15 0.35 12 0.05
4 Dealseeker 0.6 0.05 0.35 12 0.10
「EarlyAdopters」は、ラベル「BySearchEngine」、60%「ByDirectCustomer」、および 30%「ByPartnerBlog」を持つトランザクションの 10% (平均、正規分布) を持つという考えです。これらの値は互いに除外する必要があります。最終的なデータセットでは、PartnerBlog と検索エンジンの両方を介して 1 つを取得することはできません。オプションは次のとおりです。
ObtainedBy <- c("SearchEngine","DirectCustomer","PartnerBlog")
さらに、上記の手段を利用して正規分布する割引変数を生成したいと考えています。簡単にするために、標準偏差は平均/5 とすることができます。
次に、最もトリッキーな部分ですが、いくつかのルールに従ってこれらのトランザクションを生成したいと思います。
- 数日にわたってある程度均等に分布し、週末にはわずかに増加する可能性があります。
- 2006 年から 2014 年の間に広がった。
- 長年にわたる顧客のトランザクション数の分散;
- 発売前の商品はご購入いただけません。
その他のパラメータ:
YearlyMax <- 1 # ? How would I specify this, a growing number would be even nicer?
DailyMax <- 1 # Same question? Likely dependent on YearlyMax
CustomerID 2 の結果は次のようになります。
Transactions <- data.frame(
ID = c(1,2),
CustomerID = c(2,2), # The customer that bought the item.
ProductID = c(51,100), # Products chosen to approach customer type's Timeliness average
DateOfPurchase = c("2013-01-02", "2012-12-03"), # Date chosen to mimic timeliness average
ReferredBy = c("DirectCustomer", "SearchEngine"), # See above, follows proportions previously identified.
GrossPrice = c(50,52.99), # based on Product Price, no real restrictions other than using it for my financial dashboard.
Discount = c(0.02, 0.0)) # Chosen to mimic customer type's discount behavior.
Transactions
ID CustomerID ProductID DateOfPurchase ReferredBy GrossPrice Discount
1 1 2 51 2013-01-02 DirectCustomer 50.00 0.02
2 2 2 100 2012-12-03 SearchEngine 52.99 0.00
R コードを書くことにますます自信を持っていますが、グローバル パラメーター (毎日のトランザクションの分布、顧客ごとの年間最大 # トランザクション) とさまざまなリンケージを維持するためのコードを書くのに苦労しています。
- 適時性: リリース後の購入の速さ
- ReferredBy: この顧客がどのようにして私の Web サイトにたどり着いたか?
- 顧客がどれだけの割引を受けているか (顧客が割引にどれほど敏感かを示すため)
これにより、顧客テーブルに for ループを記述して顧客ごとにトランザクションを生成する必要があるのか、それとも別のルートを取るべきなのかがわかりません。どんな貢献も大歓迎です。R を使用してこの問題を解決したいと考えていますが、代替のダミー データセットも歓迎します。この投稿は、進行に応じて更新されます。
私の現在の擬似コード:
- sample() を使用して顧客を顧客タイプに割り当てます
- Customers$NumBought トランザクションを生成する
- ... まだ考えています?
編集: トランザクション テーブルを生成します。次は、正しいデータを入力する必要があります。
Tr <- data.frame(
ID = 1:sum(Customers$NumBought),
CustomerID = NA,
DateOfPurchase = NA,
ReferredBy = NA,
GrossPrice=NA,
Discount=NA)