2017-04-04 11 views
0

私は与えられた顧客が休眠状態になるかどうか予測する必要があるチャーン分析の予測問題に取り組んでいます。私は顧客価値と呼ばれる変数を持っています。私が探したいのは、その価値が連続3カ月間のトレンドを下げたのか、それが衰退し始めたのかです。rの金額の下落傾向を見つける方法

Client_ID  YearMonth  Amount 
    ABC    201607   1000 
    ABC    201606   2000 
    ABC    201605   3000 
    ABC    201608   3500 
    ABC    201604   2500 

同様に、顧客データベースは2年間、データセットには10​​Kを超える顧客があります。上記のデータフレームでは、クライアントABC201605,201606,201607からトレンドが減少していますので、この顧客に201605というフラグを立てて、この顧客が収益を削減した理由を他の変数の助けを借りて特定したいと考えています。データフレームを希望

Client_ID  YearMonth  Amount Decline_Flag 
    ABC    201607   1000   0 
    ABC    201606   2000   0 
    ABC    201605   3000   1 
    ABC    201608   3500   0 
    ABC    201604   2500   0 

どのように私はRでこれを達成することができますでしょうか?

答えて

1

ここでは、毎月のデータがあると仮定して、連続した行が実際には1か月離れていると仮定します。そうでない場合でも、それを適応させるのは比較的簡単です。

# Libraries: stringr to extract the years and months, 
# dplyr and tidyr for pipe operations 
library(stringr) 
library(dplyr) 
library(tidyr) 

df = read.table(text=tab, header=TRUE) 
df = df %>% 
    mutate(
     year = as.numeric(str_sub(YearMonth, 1, 4)), 
     month = as.numeric(str_sub(YearMonth, 5, 6)) 
    ) %>% 
    arrange(Client_ID, year, month) %>% 
    group_by(Client_ID) %>% 
    mutate(decline = c(FALSE, diff(Amount) < 0), 
      # Look at 2 upcoming rows and see if there was a decline in 
      # both of them 
      decline3 = (lead(decline, 1, default=FALSE) & lead(decline, 2, default=FALSE))) 

そして、「3ヶ月の衰退」フラグがdecline3列に格納されています

> df 
Source: local data frame [5 x 7] 
Groups: Client_ID [1] 

    Client_ID YearMonth Amount year month decline decline3 
    <fctr>  <int> <int> <dbl> <dbl> <lgl> <lgl> 
1  ABC 201604 2500 2016  4 FALSE FALSE 
2  ABC 201605 3000 2016  5 FALSE  TRUE 
3  ABC 201606 2000 2016  6 TRUE FALSE 
4  ABC 201607 1000 2016  7 TRUE FALSE 
5  ABC 201608 3500 2016  8 FALSE FALSE 
1

あなたが代わりにこのブール値の前回測定値に対する移動平均デルタを使用して検討するかもしれません。この方法は、最小限の減少を大規模なものと同等のものとして扱います。これは、ラインの下方への予測の質に影響を与える可能性があります。

関連する問題