Expectation:
rfm_segment()
on the example vignette, customers with rfm_score
of 555 should be assigned Champions tag, per input thresholds, such as the customer below.Reality:
segments[5, ] %>% select(customer_id:rfm_score) #> # A tibble: 1 x 3 #> customer_id segment rfm_score #> <chr> <chr> <dbl> #> 1 Agness O'Keefe Loyal Customers 555Suggestion
In conditional logic for assigning segments, add an extra condition such as:
for (i in seq_len(n_segments)) { rfm_score_table$segment[( (rfm_score_table$recency_score %>% dplyr::between(recency_lower[i], recency_upper[i])) & (rfm_score_table$frequency_score %>% dplyr::between(frequency_lower[i], frequency_upper[i])) & (rfm_score_table$monetary_score %>% dplyr::between(monetary_lower[i], monetary_upper[i]))) & # new condition to avoid overwriting existing assignment !rfm_score_table$segment %in% segment_names] <- segment_names[i] }Reprex
library(rfm) analysis_date <- lubridate::as_date("2006-12-31", tz = "UTC") rfm_result <- rfm_table_order(rfm_data_orders, customer_id, order_date, revenue, analysis_date) rfm_result segment_names <- c( "Champions", "Loyal Customers", "Potential Loyalist", "New Customers", "Promising", "Need Attention", "About To Sleep", "At Risk", "Can't Lose Them", "Lost" ) recency_lower <- c(4, 2, 3, 4, 3, 2, 2, 1, 1, 1) recency_upper <- c(5, 5, 5, 5, 4, 3, 3, 2, 1, 2) frequency_lower <- c(4, 3, 1, 1, 1, 2, 1, 2, 4, 1) frequency_upper <- c(5, 5, 3, 1, 1, 3, 2, 5, 5, 2) monetary_lower <- c(4, 3, 1, 1, 1, 2, 1, 2, 4, 1) monetary_upper <- c(5, 5, 3, 1, 1, 3, 2, 5, 5, 2) segments <- rfm_segment( rfm_result, segment_names, recency_lower, recency_upper, frequency_lower, frequency_upper, monetary_lower, monetary_upper )
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4