Skip to content

Instantly share code, notes, and snippets.

@audhiaprilliant
Created July 21, 2021 01:28
Show Gist options
  • Select an option

  • Save audhiaprilliant/7598dbc489dc99455674ec8729614eb9 to your computer and use it in GitHub Desktop.

Select an option

Save audhiaprilliant/7598dbc489dc99455674ec8729614eb9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "adopted-worthy",
"metadata": {},
"source": [
"# Customer Segmentation using RFM Model"
]
},
{
"cell_type": "markdown",
"id": "satisfactory-reynolds",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "circular-bookmark",
"metadata": {},
"source": [
"## Load the packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "first-sight",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"\"package 'diceR' was built under R version 3.6.3\"Registered S3 methods overwritten by 'ggplot2':\n",
" method from \n",
" [.quosures rlang\n",
" c.quosures rlang\n",
" print.quosures rlang\n",
"\n",
"Attaching package: 'dplyr'\n",
"\n",
"The following objects are masked from 'package:stats':\n",
"\n",
" filter, lag\n",
"\n",
"The following objects are masked from 'package:base':\n",
"\n",
" intersect, setdiff, setequal, union\n",
"\n",
"Warning message:\n",
"\"package 'treemapify' was built under R version 3.6.3\""
]
}
],
"source": [
"# Package for cluster ensemble\n",
"library(diceR)\n",
"# Package for data manipulation\n",
"library(dplyr)\n",
"library(magrittr)\n",
"# Package for data viz\n",
"library(ggplot2)\n",
"# Package for making treemap\n",
"library(treemapify)"
]
},
{
"cell_type": "markdown",
"id": "tropical-extent",
"metadata": {},
"source": [
"## Load the data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "hourly-rogers",
"metadata": {},
"outputs": [],
"source": [
"# Load the order data\n",
"df_orders = read.csv(file = 'data/olist_orders_dataset.csv', header = TRUE, sep = ',')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "accepted-lebanon",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>order_id</th><th scope=col>customer_id</th><th scope=col>order_status</th><th scope=col>order_purchase_timestamp</th><th scope=col>order_approved_at</th><th scope=col>order_delivered_carrier_date</th><th scope=col>order_delivered_customer_date</th><th scope=col>order_estimated_delivery_date</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>e481f51cbdc54678b7cc49136f2d6af7</td><td>9ef432eb6251297304e76186b10a928d</td><td>delivered </td><td>2017-10-02 10:56:33 </td><td>2017-10-02 11:07:15 </td><td>2017-10-04 19:55:00 </td><td>2017-10-10 21:25:13 </td><td>2017-10-18 00:00:00 </td></tr>\n",
"\t<tr><td>53cdb2fc8bc7dce0b6741e2150273451</td><td>b0830fb4747a6c6d20dea0b8c802d7ef</td><td>delivered </td><td>2018-07-24 20:41:37 </td><td>2018-07-26 03:24:27 </td><td>2018-07-26 14:31:00 </td><td>2018-08-07 15:27:45 </td><td>2018-08-13 00:00:00 </td></tr>\n",
"\t<tr><td>47770eb9100c2d0c44946d9cf07ec65d</td><td>41ce2a54c0b03bf3443c3d931a367089</td><td>delivered </td><td>2018-08-08 08:38:49 </td><td>2018-08-08 08:55:23 </td><td>2018-08-08 13:50:00 </td><td>2018-08-17 18:06:29 </td><td>2018-09-04 00:00:00 </td></tr>\n",
"\t<tr><td>949d5b44dbf5de918fe9c16f97b45f8a</td><td>f88197465ea7920adcdbec7375364d82</td><td>delivered </td><td>2017-11-18 19:28:06 </td><td>2017-11-18 19:45:59 </td><td>2017-11-22 13:39:59 </td><td>2017-12-02 00:28:42 </td><td>2017-12-15 00:00:00 </td></tr>\n",
"\t<tr><td>ad21c59c0840e6cb83a9ceb5573f8159</td><td>8ab97904e6daea8866dbdbc4fb7aad2c</td><td>delivered </td><td>2018-02-13 21:18:39 </td><td>2018-02-13 22:20:29 </td><td>2018-02-14 19:46:34 </td><td>2018-02-16 18:17:02 </td><td>2018-02-26 00:00:00 </td></tr>\n",
"\t<tr><td>a4591c265e18cb1dcee52889e2d8acc3</td><td>503740e9ca751ccdda7ba28e9ab8f608</td><td>delivered </td><td>2017-07-09 21:57:05 </td><td>2017-07-09 22:10:13 </td><td>2017-07-11 14:58:04 </td><td>2017-07-26 10:57:55 </td><td>2017-08-01 00:00:00 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllll}\n",
" order\\_id & customer\\_id & order\\_status & order\\_purchase\\_timestamp & order\\_approved\\_at & order\\_delivered\\_carrier\\_date & order\\_delivered\\_customer\\_date & order\\_estimated\\_delivery\\_date\\\\\n",
"\\hline\n",
"\t e481f51cbdc54678b7cc49136f2d6af7 & 9ef432eb6251297304e76186b10a928d & delivered & 2017-10-02 10:56:33 & 2017-10-02 11:07:15 & 2017-10-04 19:55:00 & 2017-10-10 21:25:13 & 2017-10-18 00:00:00 \\\\\n",
"\t 53cdb2fc8bc7dce0b6741e2150273451 & b0830fb4747a6c6d20dea0b8c802d7ef & delivered & 2018-07-24 20:41:37 & 2018-07-26 03:24:27 & 2018-07-26 14:31:00 & 2018-08-07 15:27:45 & 2018-08-13 00:00:00 \\\\\n",
"\t 47770eb9100c2d0c44946d9cf07ec65d & 41ce2a54c0b03bf3443c3d931a367089 & delivered & 2018-08-08 08:38:49 & 2018-08-08 08:55:23 & 2018-08-08 13:50:00 & 2018-08-17 18:06:29 & 2018-09-04 00:00:00 \\\\\n",
"\t 949d5b44dbf5de918fe9c16f97b45f8a & f88197465ea7920adcdbec7375364d82 & delivered & 2017-11-18 19:28:06 & 2017-11-18 19:45:59 & 2017-11-22 13:39:59 & 2017-12-02 00:28:42 & 2017-12-15 00:00:00 \\\\\n",
"\t ad21c59c0840e6cb83a9ceb5573f8159 & 8ab97904e6daea8866dbdbc4fb7aad2c & delivered & 2018-02-13 21:18:39 & 2018-02-13 22:20:29 & 2018-02-14 19:46:34 & 2018-02-16 18:17:02 & 2018-02-26 00:00:00 \\\\\n",
"\t a4591c265e18cb1dcee52889e2d8acc3 & 503740e9ca751ccdda7ba28e9ab8f608 & delivered & 2017-07-09 21:57:05 & 2017-07-09 22:10:13 & 2017-07-11 14:58:04 & 2017-07-26 10:57:55 & 2017-08-01 00:00:00 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| order_id | customer_id | order_status | order_purchase_timestamp | order_approved_at | order_delivered_carrier_date | order_delivered_customer_date | order_estimated_delivery_date |\n",
"|---|---|---|---|---|---|---|---|\n",
"| e481f51cbdc54678b7cc49136f2d6af7 | 9ef432eb6251297304e76186b10a928d | delivered | 2017-10-02 10:56:33 | 2017-10-02 11:07:15 | 2017-10-04 19:55:00 | 2017-10-10 21:25:13 | 2017-10-18 00:00:00 |\n",
"| 53cdb2fc8bc7dce0b6741e2150273451 | b0830fb4747a6c6d20dea0b8c802d7ef | delivered | 2018-07-24 20:41:37 | 2018-07-26 03:24:27 | 2018-07-26 14:31:00 | 2018-08-07 15:27:45 | 2018-08-13 00:00:00 |\n",
"| 47770eb9100c2d0c44946d9cf07ec65d | 41ce2a54c0b03bf3443c3d931a367089 | delivered | 2018-08-08 08:38:49 | 2018-08-08 08:55:23 | 2018-08-08 13:50:00 | 2018-08-17 18:06:29 | 2018-09-04 00:00:00 |\n",
"| 949d5b44dbf5de918fe9c16f97b45f8a | f88197465ea7920adcdbec7375364d82 | delivered | 2017-11-18 19:28:06 | 2017-11-18 19:45:59 | 2017-11-22 13:39:59 | 2017-12-02 00:28:42 | 2017-12-15 00:00:00 |\n",
"| ad21c59c0840e6cb83a9ceb5573f8159 | 8ab97904e6daea8866dbdbc4fb7aad2c | delivered | 2018-02-13 21:18:39 | 2018-02-13 22:20:29 | 2018-02-14 19:46:34 | 2018-02-16 18:17:02 | 2018-02-26 00:00:00 |\n",
"| a4591c265e18cb1dcee52889e2d8acc3 | 503740e9ca751ccdda7ba28e9ab8f608 | delivered | 2017-07-09 21:57:05 | 2017-07-09 22:10:13 | 2017-07-11 14:58:04 | 2017-07-26 10:57:55 | 2017-08-01 00:00:00 |\n",
"\n"
],
"text/plain": [
" order_id customer_id \n",
"1 e481f51cbdc54678b7cc49136f2d6af7 9ef432eb6251297304e76186b10a928d\n",
"2 53cdb2fc8bc7dce0b6741e2150273451 b0830fb4747a6c6d20dea0b8c802d7ef\n",
"3 47770eb9100c2d0c44946d9cf07ec65d 41ce2a54c0b03bf3443c3d931a367089\n",
"4 949d5b44dbf5de918fe9c16f97b45f8a f88197465ea7920adcdbec7375364d82\n",
"5 ad21c59c0840e6cb83a9ceb5573f8159 8ab97904e6daea8866dbdbc4fb7aad2c\n",
"6 a4591c265e18cb1dcee52889e2d8acc3 503740e9ca751ccdda7ba28e9ab8f608\n",
" order_status order_purchase_timestamp order_approved_at \n",
"1 delivered 2017-10-02 10:56:33 2017-10-02 11:07:15\n",
"2 delivered 2018-07-24 20:41:37 2018-07-26 03:24:27\n",
"3 delivered 2018-08-08 08:38:49 2018-08-08 08:55:23\n",
"4 delivered 2017-11-18 19:28:06 2017-11-18 19:45:59\n",
"5 delivered 2018-02-13 21:18:39 2018-02-13 22:20:29\n",
"6 delivered 2017-07-09 21:57:05 2017-07-09 22:10:13\n",
" order_delivered_carrier_date order_delivered_customer_date\n",
"1 2017-10-04 19:55:00 2017-10-10 21:25:13 \n",
"2 2018-07-26 14:31:00 2018-08-07 15:27:45 \n",
"3 2018-08-08 13:50:00 2018-08-17 18:06:29 \n",
"4 2017-11-22 13:39:59 2017-12-02 00:28:42 \n",
"5 2018-02-14 19:46:34 2018-02-16 18:17:02 \n",
"6 2017-07-11 14:58:04 2017-07-26 10:57:55 \n",
" order_estimated_delivery_date\n",
"1 2017-10-18 00:00:00 \n",
"2 2018-08-13 00:00:00 \n",
"3 2018-09-04 00:00:00 \n",
"4 2017-12-15 00:00:00 \n",
"5 2018-02-26 00:00:00 \n",
"6 2017-08-01 00:00:00 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(df_orders)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "higher-employee",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'data.frame':\t99441 obs. of 8 variables:\n",
" $ order_id : Factor w/ 99441 levels \"00010242fe8c5a6d1ba2dd792cb16214\",..: 88951 32546 27770 57386 67044 63543 7553 39236 46083 89697 ...\n",
" $ customer_id : Factor w/ 99441 levels \"00012a2ce6f8dcda20d059ce98491703\",..: 61761 68730 25514 96584 53774 31118 92191 60518 95387 19282 ...\n",
" $ order_status : Factor w/ 8 levels \"approved\",\"canceled\",..: 4 4 4 4 4 4 5 4 4 4 ...\n",
" $ order_purchase_timestamp : Factor w/ 98875 levels \"2016-09-04 21:15:19\",..: 27602 90668 94566 35023 55222 15891 6386 9743 667 18535 ...\n",
" $ order_approved_at : Factor w/ 90734 levels \"\",\"2016-09-15 12:16:38\",..: 26910 83755 86887 33880 52143 15447 6368 9419 707 18033 ...\n",
" $ order_delivered_carrier_date : Factor w/ 81019 levels \"\",\"2016-10-08 10:34:01\",..: 24736 76469 78219 31487 49664 13978 1 9013 594 17711 ...\n",
" $ order_delivered_customer_date: Factor w/ 95665 levels \"\",\"2016-10-11 13:46:32\",..: 25876 88743 91784 33916 50233 15592 1 9155 597 18403 ...\n",
" $ order_estimated_delivery_date: Factor w/ 459 levels \"2016-09-30 00:00:00\",..: 213 412 428 252 299 159 100 121 56 175 ...\n"
]
}
],
"source": [
"str(df_orders)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "charming-spanish",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>99441</li>\n",
"\t<li>8</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 99441\n",
"\\item 8\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 99441\n",
"2. 8\n",
"\n",
"\n"
],
"text/plain": [
"[1] 99441 8"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dim(df_orders)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "accessory-scanner",
"metadata": {},
"outputs": [],
"source": [
"# Load the payment data\n",
"df_payments = read.csv(file = 'data/olist_order_payments_dataset.csv', header = TRUE, sep = ',')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "geological-catholic",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>order_id</th><th scope=col>payment_sequential</th><th scope=col>payment_type</th><th scope=col>payment_installments</th><th scope=col>payment_value</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>b81ef226f3fe1789b1e8b2acac839d17</td><td>1 </td><td>credit_card </td><td>8 </td><td> 99.33 </td></tr>\n",
"\t<tr><td>a9810da82917af2d9aefd1278f1dcfa0</td><td>1 </td><td>credit_card </td><td>1 </td><td> 24.39 </td></tr>\n",
"\t<tr><td>25e8ea4e93396b6fa0d3dd708e76c1bd</td><td>1 </td><td>credit_card </td><td>1 </td><td> 65.71 </td></tr>\n",
"\t<tr><td>ba78997921bbcdc1373bb41e913ab953</td><td>1 </td><td>credit_card </td><td>8 </td><td>107.78 </td></tr>\n",
"\t<tr><td>42fdf880ba16b47b59251dd489d4441a</td><td>1 </td><td>credit_card </td><td>2 </td><td>128.45 </td></tr>\n",
"\t<tr><td>298fcdf1f73eb413e4d26d01b25bc1cd</td><td>1 </td><td>credit_card </td><td>2 </td><td> 96.12 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllll}\n",
" order\\_id & payment\\_sequential & payment\\_type & payment\\_installments & payment\\_value\\\\\n",
"\\hline\n",
"\t b81ef226f3fe1789b1e8b2acac839d17 & 1 & credit\\_card & 8 & 99.33 \\\\\n",
"\t a9810da82917af2d9aefd1278f1dcfa0 & 1 & credit\\_card & 1 & 24.39 \\\\\n",
"\t 25e8ea4e93396b6fa0d3dd708e76c1bd & 1 & credit\\_card & 1 & 65.71 \\\\\n",
"\t ba78997921bbcdc1373bb41e913ab953 & 1 & credit\\_card & 8 & 107.78 \\\\\n",
"\t 42fdf880ba16b47b59251dd489d4441a & 1 & credit\\_card & 2 & 128.45 \\\\\n",
"\t 298fcdf1f73eb413e4d26d01b25bc1cd & 1 & credit\\_card & 2 & 96.12 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| order_id | payment_sequential | payment_type | payment_installments | payment_value |\n",
"|---|---|---|---|---|\n",
"| b81ef226f3fe1789b1e8b2acac839d17 | 1 | credit_card | 8 | 99.33 |\n",
"| a9810da82917af2d9aefd1278f1dcfa0 | 1 | credit_card | 1 | 24.39 |\n",
"| 25e8ea4e93396b6fa0d3dd708e76c1bd | 1 | credit_card | 1 | 65.71 |\n",
"| ba78997921bbcdc1373bb41e913ab953 | 1 | credit_card | 8 | 107.78 |\n",
"| 42fdf880ba16b47b59251dd489d4441a | 1 | credit_card | 2 | 128.45 |\n",
"| 298fcdf1f73eb413e4d26d01b25bc1cd | 1 | credit_card | 2 | 96.12 |\n",
"\n"
],
"text/plain": [
" order_id payment_sequential payment_type\n",
"1 b81ef226f3fe1789b1e8b2acac839d17 1 credit_card \n",
"2 a9810da82917af2d9aefd1278f1dcfa0 1 credit_card \n",
"3 25e8ea4e93396b6fa0d3dd708e76c1bd 1 credit_card \n",
"4 ba78997921bbcdc1373bb41e913ab953 1 credit_card \n",
"5 42fdf880ba16b47b59251dd489d4441a 1 credit_card \n",
"6 298fcdf1f73eb413e4d26d01b25bc1cd 1 credit_card \n",
" payment_installments payment_value\n",
"1 8 99.33 \n",
"2 1 24.39 \n",
"3 1 65.71 \n",
"4 8 107.78 \n",
"5 2 128.45 \n",
"6 2 96.12 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(df_payments)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "addressed-repeat",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'data.frame':\t103886 obs. of 5 variables:\n",
" $ order_id : Factor w/ 99440 levels \"00010242fe8c5a6d1ba2dd792cb16214\",..: 71446 65633 14657 72396 25967 16046 46192 23843 12217 2146 ...\n",
" $ payment_sequential : int 1 1 1 1 1 1 1 1 1 1 ...\n",
" $ payment_type : Factor w/ 5 levels \"boleto\",\"credit_card\",..: 2 2 2 2 2 2 2 2 2 1 ...\n",
" $ payment_installments: int 8 1 1 8 2 2 1 3 6 1 ...\n",
" $ payment_value : num 99.3 24.4 65.7 107.8 128.4 ...\n"
]
}
],
"source": [
"str(df_payments)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "after-difference",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>103886</li>\n",
"\t<li>5</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 103886\n",
"\\item 5\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 103886\n",
"2. 5\n",
"\n",
"\n"
],
"text/plain": [
"[1] 103886 5"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dim(df_payments)"
]
},
{
"cell_type": "markdown",
"id": "together-timber",
"metadata": {},
"source": [
"## Data manipulation"
]
},
{
"cell_type": "markdown",
"id": "governmental-protocol",
"metadata": {},
"source": [
"### 1 Convert the data type"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "chronic-fisher",
"metadata": {},
"outputs": [],
"source": [
"# List of columns which are in the date-time\n",
"cols_date = c('order_purchase_timestamp', 'order_approved_at', 'order_delivered_carrier_date',\n",
" 'order_delivered_customer_date', 'order_estimated_delivery_date')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "welcome-delhi",
"metadata": {},
"outputs": [],
"source": [
"# Covert the datetime\n",
"for (index in 1:length(cols_date)) {\n",
" df_orders[,cols_date[index]] = as.POSIXct(df_orders[,cols_date[index]], format = '%Y-%m-%d %H:%M:%S', tz = Sys.timezone())\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "through-spare",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"$order_purchase_timestamp\n",
" Min. 1st Qu. Median \n",
"\"2016-09-04 21:15:19\" \"2017-09-12 14:46:19\" \"2018-01-18 23:04:36\" \n",
" Mean 3rd Qu. Max. \n",
"\"2017-12-31 08:43:12\" \"2018-05-04 15:42:16\" \"2018-10-17 17:30:18\" \n",
"\n",
"$order_approved_at\n",
" Min. 1st Qu. Median \n",
"\"2016-09-15 12:16:38\" \"2017-09-12 23:24:16\" \"2018-01-19 11:36:13\" \n",
" Mean 3rd Qu. Max. \n",
"\"2017-12-31 18:35:24\" \"2018-05-04 20:35:10\" \"2018-09-03 17:40:06\" \n",
" NA's \n",
" \"160\" \n",
"\n",
"$order_delivered_carrier_date\n",
" Min. 1st Qu. Median \n",
"\"2016-10-08 10:34:01\" \"2017-09-15 22:28:50\" \"2018-01-24 16:10:58\" \n",
" Mean 3rd Qu. Max. \n",
"\"2018-01-04 21:49:48\" \"2018-05-08 13:37:45\" \"2018-09-11 19:48:28\" \n",
" NA's \n",
" \"1783\" \n",
"\n",
"$order_delivered_customer_date\n",
" Min. 1st Qu. Median \n",
"\"2016-10-11 13:46:32\" \"2017-09-25 22:07:22\" \"2018-02-02 19:28:10\" \n",
" Mean 3rd Qu. Max. \n",
"\"2018-01-14 12:09:19\" \"2018-05-15 22:48:52\" \"2018-10-17 13:22:46\" \n",
" NA's \n",
" \"2965\" \n",
"\n",
"$order_estimated_delivery_date\n",
" Min. 1st Qu. Median \n",
"\"2016-09-30 00:00:00\" \"2017-10-03 00:00:00\" \"2018-02-15 00:00:00\" \n",
" Mean 3rd Qu. Max. \n",
"\"2018-01-24 03:08:37\" \"2018-05-25 00:00:00\" \"2018-11-12 00:00:00\" \n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"lapply(df_orders[, cols_date], summary)"
]
},
{
"cell_type": "markdown",
"id": "based-center",
"metadata": {},
"source": [
"### 2 Validate the missing value"
]
},
{
"cell_type": "markdown",
"id": "departmental-guitar",
"metadata": {},
"source": [
"**`olist_order_dataset.csv`** **`olist_order_payments_dataset.csv`**"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "european-retrieval",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>order_id</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>customer_id</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>order_status</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>order_purchase_timestamp</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>order_approved_at</dt>\n",
"\t\t<dd>160</dd>\n",
"\t<dt>order_delivered_carrier_date</dt>\n",
"\t\t<dd>1783</dd>\n",
"\t<dt>order_delivered_customer_date</dt>\n",
"\t\t<dd>2965</dd>\n",
"\t<dt>order_estimated_delivery_date</dt>\n",
"\t\t<dd>0</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[order\\textbackslash{}\\_id] 0\n",
"\\item[customer\\textbackslash{}\\_id] 0\n",
"\\item[order\\textbackslash{}\\_status] 0\n",
"\\item[order\\textbackslash{}\\_purchase\\textbackslash{}\\_timestamp] 0\n",
"\\item[order\\textbackslash{}\\_approved\\textbackslash{}\\_at] 160\n",
"\\item[order\\textbackslash{}\\_delivered\\textbackslash{}\\_carrier\\textbackslash{}\\_date] 1783\n",
"\\item[order\\textbackslash{}\\_delivered\\textbackslash{}\\_customer\\textbackslash{}\\_date] 2965\n",
"\\item[order\\textbackslash{}\\_estimated\\textbackslash{}\\_delivery\\textbackslash{}\\_date] 0\n",
"\\end{description*}\n"
],
"text/markdown": [
"order_id\n",
": 0customer_id\n",
": 0order_status\n",
": 0order_purchase_timestamp\n",
": 0order_approved_at\n",
": 160order_delivered_carrier_date\n",
": 1783order_delivered_customer_date\n",
": 2965order_estimated_delivery_date\n",
": 0\n",
"\n"
],
"text/plain": [
" order_id customer_id \n",
" 0 0 \n",
" order_status order_purchase_timestamp \n",
" 0 0 \n",
" order_approved_at order_delivered_carrier_date \n",
" 160 1783 \n",
"order_delivered_customer_date order_estimated_delivery_date \n",
" 2965 0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>order_id</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>payment_sequential</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>payment_type</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>payment_installments</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>payment_value</dt>\n",
"\t\t<dd>0</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[order\\textbackslash{}\\_id] 0\n",
"\\item[payment\\textbackslash{}\\_sequential] 0\n",
"\\item[payment\\textbackslash{}\\_type] 0\n",
"\\item[payment\\textbackslash{}\\_installments] 0\n",
"\\item[payment\\textbackslash{}\\_value] 0\n",
"\\end{description*}\n"
],
"text/markdown": [
"order_id\n",
": 0payment_sequential\n",
": 0payment_type\n",
": 0payment_installments\n",
": 0payment_value\n",
": 0\n",
"\n"
],
"text/plain": [
" order_id payment_sequential payment_type \n",
" 0 0 0 \n",
"payment_installments payment_value \n",
" 0 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Validate the missing value\n",
"sapply(df_orders, function(x) sum(is.na(x)))\n",
"sapply(df_payments, function(x) sum(is.na(x)))"
]
},
{
"cell_type": "markdown",
"id": "dimensional-philip",
"metadata": {},
"source": [
"### 3 Check the duplication"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "genuine-branch",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>0</li>\n",
"\t<li>8</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 0\n",
"\\item 8\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 0\n",
"2. 8\n",
"\n",
"\n"
],
"text/plain": [
"[1] 0 8"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>0</li>\n",
"\t<li>5</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 0\n",
"\\item 5\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 0\n",
"2. 5\n",
"\n",
"\n"
],
"text/plain": [
"[1] 0 5"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Check the data duplidation\n",
"dim(df_orders[duplicated(df_orders),])\n",
"dim(df_payments[duplicated(df_payments),])"
]
},
{
"cell_type": "markdown",
"id": "referenced-tutorial",
"metadata": {},
"source": [
"### 4 Merge the **`olist_order_dataset.csv`** and **`olist_order_payments_dataset.csv`**"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "sporting-catholic",
"metadata": {},
"outputs": [],
"source": [
"# Merge the data\n",
"df_merged = merge(x = df_orders, y = df_payments, by = 'order_id', all.x = TRUE)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "blank-processing",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>order_id</th><th scope=col>customer_id</th><th scope=col>order_status</th><th scope=col>order_purchase_timestamp</th><th scope=col>order_approved_at</th><th scope=col>order_delivered_carrier_date</th><th scope=col>order_delivered_customer_date</th><th scope=col>order_estimated_delivery_date</th><th scope=col>payment_sequential</th><th scope=col>payment_type</th><th scope=col>payment_installments</th><th scope=col>payment_value</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>00010242fe8c5a6d1ba2dd792cb16214</td><td>3ce436f183e68e07877b285a838db11a</td><td>delivered </td><td>2017-09-13 08:59:02 </td><td>2017-09-13 09:45:35 </td><td>2017-09-19 18:34:16 </td><td>2017-09-20 23:43:48 </td><td>2017-09-29 </td><td>1 </td><td>credit_card </td><td>2 </td><td> 72.19 </td></tr>\n",
"\t<tr><td>00018f77f2f0320c557190d7a144bdd3</td><td>f6dd3ec061db4e3987629fe6b26e5cce</td><td>delivered </td><td>2017-04-26 10:53:06 </td><td>2017-04-26 11:05:13 </td><td>2017-05-04 14:35:00 </td><td>2017-05-12 16:04:24 </td><td>2017-05-15 </td><td>1 </td><td>credit_card </td><td>3 </td><td>259.83 </td></tr>\n",
"\t<tr><td>000229ec398224ef6ca0657da4fc703e</td><td>6489ae5e4333f3693df5ad4372dab6d3</td><td>delivered </td><td>2018-01-14 14:33:31 </td><td>2018-01-14 14:48:30 </td><td>2018-01-16 12:36:48 </td><td>2018-01-22 13:19:16 </td><td>2018-02-05 </td><td>1 </td><td>credit_card </td><td>5 </td><td>216.87 </td></tr>\n",
"\t<tr><td>00024acbcdf0a6daa1e931b038114c75</td><td>d4eb9395c8c0431ee92fce09860c5a06</td><td>delivered </td><td>2018-08-08 10:00:35 </td><td>2018-08-08 10:10:18 </td><td>2018-08-10 13:28:00 </td><td>2018-08-14 13:32:39 </td><td>2018-08-20 </td><td>1 </td><td>credit_card </td><td>2 </td><td> 25.78 </td></tr>\n",
"\t<tr><td>00042b26cf59d7ce69dfabb4e55b4fd9</td><td>58dbd0b2d70206bf40e62cd34e84d795</td><td>delivered </td><td>2017-02-04 13:57:51 </td><td>2017-02-04 14:10:13 </td><td>2017-02-16 09:46:09 </td><td>2017-03-01 16:42:31 </td><td>2017-03-17 </td><td>1 </td><td>credit_card </td><td>3 </td><td>218.04 </td></tr>\n",
"\t<tr><td>00048cc3ae777c65dbb7d2a0634bc1ea</td><td>816cbea969fe5b689b39cfc97a506742</td><td>delivered </td><td>2017-05-15 21:42:34 </td><td>2017-05-17 03:55:27 </td><td>2017-05-17 11:05:55 </td><td>2017-05-22 13:44:35 </td><td>2017-06-06 </td><td>1 </td><td>boleto </td><td>1 </td><td> 34.59 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllllllll}\n",
" order\\_id & customer\\_id & order\\_status & order\\_purchase\\_timestamp & order\\_approved\\_at & order\\_delivered\\_carrier\\_date & order\\_delivered\\_customer\\_date & order\\_estimated\\_delivery\\_date & payment\\_sequential & payment\\_type & payment\\_installments & payment\\_value\\\\\n",
"\\hline\n",
"\t 00010242fe8c5a6d1ba2dd792cb16214 & 3ce436f183e68e07877b285a838db11a & delivered & 2017-09-13 08:59:02 & 2017-09-13 09:45:35 & 2017-09-19 18:34:16 & 2017-09-20 23:43:48 & 2017-09-29 & 1 & credit\\_card & 2 & 72.19 \\\\\n",
"\t 00018f77f2f0320c557190d7a144bdd3 & f6dd3ec061db4e3987629fe6b26e5cce & delivered & 2017-04-26 10:53:06 & 2017-04-26 11:05:13 & 2017-05-04 14:35:00 & 2017-05-12 16:04:24 & 2017-05-15 & 1 & credit\\_card & 3 & 259.83 \\\\\n",
"\t 000229ec398224ef6ca0657da4fc703e & 6489ae5e4333f3693df5ad4372dab6d3 & delivered & 2018-01-14 14:33:31 & 2018-01-14 14:48:30 & 2018-01-16 12:36:48 & 2018-01-22 13:19:16 & 2018-02-05 & 1 & credit\\_card & 5 & 216.87 \\\\\n",
"\t 00024acbcdf0a6daa1e931b038114c75 & d4eb9395c8c0431ee92fce09860c5a06 & delivered & 2018-08-08 10:00:35 & 2018-08-08 10:10:18 & 2018-08-10 13:28:00 & 2018-08-14 13:32:39 & 2018-08-20 & 1 & credit\\_card & 2 & 25.78 \\\\\n",
"\t 00042b26cf59d7ce69dfabb4e55b4fd9 & 58dbd0b2d70206bf40e62cd34e84d795 & delivered & 2017-02-04 13:57:51 & 2017-02-04 14:10:13 & 2017-02-16 09:46:09 & 2017-03-01 16:42:31 & 2017-03-17 & 1 & credit\\_card & 3 & 218.04 \\\\\n",
"\t 00048cc3ae777c65dbb7d2a0634bc1ea & 816cbea969fe5b689b39cfc97a506742 & delivered & 2017-05-15 21:42:34 & 2017-05-17 03:55:27 & 2017-05-17 11:05:55 & 2017-05-22 13:44:35 & 2017-06-06 & 1 & boleto & 1 & 34.59 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| order_id | customer_id | order_status | order_purchase_timestamp | order_approved_at | order_delivered_carrier_date | order_delivered_customer_date | order_estimated_delivery_date | payment_sequential | payment_type | payment_installments | payment_value |\n",
"|---|---|---|---|---|---|---|---|---|---|---|---|\n",
"| 00010242fe8c5a6d1ba2dd792cb16214 | 3ce436f183e68e07877b285a838db11a | delivered | 2017-09-13 08:59:02 | 2017-09-13 09:45:35 | 2017-09-19 18:34:16 | 2017-09-20 23:43:48 | 2017-09-29 | 1 | credit_card | 2 | 72.19 |\n",
"| 00018f77f2f0320c557190d7a144bdd3 | f6dd3ec061db4e3987629fe6b26e5cce | delivered | 2017-04-26 10:53:06 | 2017-04-26 11:05:13 | 2017-05-04 14:35:00 | 2017-05-12 16:04:24 | 2017-05-15 | 1 | credit_card | 3 | 259.83 |\n",
"| 000229ec398224ef6ca0657da4fc703e | 6489ae5e4333f3693df5ad4372dab6d3 | delivered | 2018-01-14 14:33:31 | 2018-01-14 14:48:30 | 2018-01-16 12:36:48 | 2018-01-22 13:19:16 | 2018-02-05 | 1 | credit_card | 5 | 216.87 |\n",
"| 00024acbcdf0a6daa1e931b038114c75 | d4eb9395c8c0431ee92fce09860c5a06 | delivered | 2018-08-08 10:00:35 | 2018-08-08 10:10:18 | 2018-08-10 13:28:00 | 2018-08-14 13:32:39 | 2018-08-20 | 1 | credit_card | 2 | 25.78 |\n",
"| 00042b26cf59d7ce69dfabb4e55b4fd9 | 58dbd0b2d70206bf40e62cd34e84d795 | delivered | 2017-02-04 13:57:51 | 2017-02-04 14:10:13 | 2017-02-16 09:46:09 | 2017-03-01 16:42:31 | 2017-03-17 | 1 | credit_card | 3 | 218.04 |\n",
"| 00048cc3ae777c65dbb7d2a0634bc1ea | 816cbea969fe5b689b39cfc97a506742 | delivered | 2017-05-15 21:42:34 | 2017-05-17 03:55:27 | 2017-05-17 11:05:55 | 2017-05-22 13:44:35 | 2017-06-06 | 1 | boleto | 1 | 34.59 |\n",
"\n"
],
"text/plain": [
" order_id customer_id \n",
"1 00010242fe8c5a6d1ba2dd792cb16214 3ce436f183e68e07877b285a838db11a\n",
"2 00018f77f2f0320c557190d7a144bdd3 f6dd3ec061db4e3987629fe6b26e5cce\n",
"3 000229ec398224ef6ca0657da4fc703e 6489ae5e4333f3693df5ad4372dab6d3\n",
"4 00024acbcdf0a6daa1e931b038114c75 d4eb9395c8c0431ee92fce09860c5a06\n",
"5 00042b26cf59d7ce69dfabb4e55b4fd9 58dbd0b2d70206bf40e62cd34e84d795\n",
"6 00048cc3ae777c65dbb7d2a0634bc1ea 816cbea969fe5b689b39cfc97a506742\n",
" order_status order_purchase_timestamp order_approved_at \n",
"1 delivered 2017-09-13 08:59:02 2017-09-13 09:45:35\n",
"2 delivered 2017-04-26 10:53:06 2017-04-26 11:05:13\n",
"3 delivered 2018-01-14 14:33:31 2018-01-14 14:48:30\n",
"4 delivered 2018-08-08 10:00:35 2018-08-08 10:10:18\n",
"5 delivered 2017-02-04 13:57:51 2017-02-04 14:10:13\n",
"6 delivered 2017-05-15 21:42:34 2017-05-17 03:55:27\n",
" order_delivered_carrier_date order_delivered_customer_date\n",
"1 2017-09-19 18:34:16 2017-09-20 23:43:48 \n",
"2 2017-05-04 14:35:00 2017-05-12 16:04:24 \n",
"3 2018-01-16 12:36:48 2018-01-22 13:19:16 \n",
"4 2018-08-10 13:28:00 2018-08-14 13:32:39 \n",
"5 2017-02-16 09:46:09 2017-03-01 16:42:31 \n",
"6 2017-05-17 11:05:55 2017-05-22 13:44:35 \n",
" order_estimated_delivery_date payment_sequential payment_type\n",
"1 2017-09-29 1 credit_card \n",
"2 2017-05-15 1 credit_card \n",
"3 2018-02-05 1 credit_card \n",
"4 2018-08-20 1 credit_card \n",
"5 2017-03-17 1 credit_card \n",
"6 2017-06-06 1 boleto \n",
" payment_installments payment_value\n",
"1 2 72.19 \n",
"2 3 259.83 \n",
"3 5 216.87 \n",
"4 2 25.78 \n",
"5 3 218.04 \n",
"6 1 34.59 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(df_merged)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "muslim-anderson",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'data.frame':\t103887 obs. of 12 variables:\n",
" $ order_id : Factor w/ 99441 levels \"00010242fe8c5a6d1ba2dd792cb16214\",..: 1 2 3 4 5 6 7 8 9 10 ...\n",
" $ customer_id : Factor w/ 99441 levels \"00012a2ce6f8dcda20d059ce98491703\",..: 23675 95963 38903 82958 34382 50184 19737 61707 8540 20619 ...\n",
" $ order_status : Factor w/ 8 levels \"approved\",\"canceled\",..: 4 4 4 4 4 4 4 4 4 4 ...\n",
" $ order_purchase_timestamp : POSIXct, format: \"2017-09-13 08:59:02\" \"2017-04-26 10:53:06\" ...\n",
" $ order_approved_at : POSIXct, format: \"2017-09-13 09:45:35\" \"2017-04-26 11:05:13\" ...\n",
" $ order_delivered_carrier_date : POSIXct, format: \"2017-09-19 18:34:16\" \"2017-05-04 14:35:00\" ...\n",
" $ order_delivered_customer_date: POSIXct, format: \"2017-09-20 23:43:48\" \"2017-05-12 16:04:24\" ...\n",
" $ order_estimated_delivery_date: POSIXct, format: \"2017-09-29\" \"2017-05-15\" ...\n",
" $ payment_sequential : int 1 1 1 1 1 1 1 1 1 1 ...\n",
" $ payment_type : Factor w/ 5 levels \"boleto\",\"credit_card\",..: 2 2 2 2 2 1 2 2 2 2 ...\n",
" $ payment_installments : int 2 3 5 2 3 1 1 10 3 1 ...\n",
" $ payment_value : num 72.2 259.8 216.9 25.8 218 ...\n"
]
}
],
"source": [
"str(df_merged)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "satisfactory-water",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>103887</li>\n",
"\t<li>12</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 103887\n",
"\\item 12\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 103887\n",
"2. 12\n",
"\n",
"\n"
],
"text/plain": [
"[1] 103887 12"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dim(df_merged)"
]
},
{
"cell_type": "markdown",
"id": "deadly-gathering",
"metadata": {},
"source": [
"### 5 Create RFM table"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "hungarian-vertical",
"metadata": {},
"outputs": [],
"source": [
"snapshot_date = max(df_merged[,'order_purchase_timestamp']) + (24 * 60 * 60)\n",
"rfm = df_merged %>%\n",
" group_by(customer_id) %>%\n",
" summarize(\n",
" `Last Purchase` = max(order_purchase_timestamp),\n",
" Recency = (snapshot_date - max(order_purchase_timestamp)),\n",
" Frequency = n_distinct(payment_value),\n",
" Monetary = sum(payment_value, na.rm = TRUE)\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "injured-delicious",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>00012a2ce6f8dcda20d059ce98491703</td><td>2017-11-14 16:08:26 </td><td>338.0569 days </td><td>1 </td><td>114.74 </td></tr>\n",
"\t<tr><td>000161a058600d5901f007fab4c27140</td><td>2017-07-16 09:40:32 </td><td>459.3262 days </td><td>1 </td><td> 67.41 </td></tr>\n",
"\t<tr><td>0001fd6190edaaf884bcaf3d49edf079</td><td>2017-02-28 11:06:43 </td><td>597.2664 days </td><td>1 </td><td>195.42 </td></tr>\n",
"\t<tr><td>0002414f95344307404f0ace7a26f1d5</td><td>2017-08-16 13:09:20 </td><td>428.1812 days </td><td>1 </td><td>179.35 </td></tr>\n",
"\t<tr><td>000379cdec625522490c315e70c7a9fb</td><td>2018-04-02 13:42:17 </td><td>199.1583 days </td><td>1 </td><td>107.01 </td></tr>\n",
"\t<tr><td>0004164d20a9e969af783496f3408652</td><td>2017-04-12 08:35:12 </td><td>554.3716 days </td><td>1 </td><td> 71.80 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary\\\\\n",
"\\hline\n",
"\t 00012a2ce6f8dcda20d059ce98491703 & 2017-11-14 16:08:26 & 338.0569 days & 1 & 114.74 \\\\\n",
"\t 000161a058600d5901f007fab4c27140 & 2017-07-16 09:40:32 & 459.3262 days & 1 & 67.41 \\\\\n",
"\t 0001fd6190edaaf884bcaf3d49edf079 & 2017-02-28 11:06:43 & 597.2664 days & 1 & 195.42 \\\\\n",
"\t 0002414f95344307404f0ace7a26f1d5 & 2017-08-16 13:09:20 & 428.1812 days & 1 & 179.35 \\\\\n",
"\t 000379cdec625522490c315e70c7a9fb & 2018-04-02 13:42:17 & 199.1583 days & 1 & 107.01 \\\\\n",
"\t 0004164d20a9e969af783496f3408652 & 2017-04-12 08:35:12 & 554.3716 days & 1 & 71.80 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary |\n",
"|---|---|---|---|---|\n",
"| 00012a2ce6f8dcda20d059ce98491703 | 2017-11-14 16:08:26 | 338.0569 days | 1 | 114.74 |\n",
"| 000161a058600d5901f007fab4c27140 | 2017-07-16 09:40:32 | 459.3262 days | 1 | 67.41 |\n",
"| 0001fd6190edaaf884bcaf3d49edf079 | 2017-02-28 11:06:43 | 597.2664 days | 1 | 195.42 |\n",
"| 0002414f95344307404f0ace7a26f1d5 | 2017-08-16 13:09:20 | 428.1812 days | 1 | 179.35 |\n",
"| 000379cdec625522490c315e70c7a9fb | 2018-04-02 13:42:17 | 199.1583 days | 1 | 107.01 |\n",
"| 0004164d20a9e969af783496f3408652 | 2017-04-12 08:35:12 | 554.3716 days | 1 | 71.80 |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 00012a2ce6f8dcda20d059ce98491703 2017-11-14 16:08:26 338.0569 days 1 \n",
"2 000161a058600d5901f007fab4c27140 2017-07-16 09:40:32 459.3262 days 1 \n",
"3 0001fd6190edaaf884bcaf3d49edf079 2017-02-28 11:06:43 597.2664 days 1 \n",
"4 0002414f95344307404f0ace7a26f1d5 2017-08-16 13:09:20 428.1812 days 1 \n",
"5 000379cdec625522490c315e70c7a9fb 2018-04-02 13:42:17 199.1583 days 1 \n",
"6 0004164d20a9e969af783496f3408652 2017-04-12 08:35:12 554.3716 days 1 \n",
" Monetary\n",
"1 114.74 \n",
"2 67.41 \n",
"3 195.42 \n",
"4 179.35 \n",
"5 107.01 \n",
"6 71.80 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm)"
]
},
{
"cell_type": "markdown",
"id": "trying-baseball",
"metadata": {},
"source": [
"### 6 Data enrichment"
]
},
{
"cell_type": "markdown",
"id": "sophisticated-baghdad",
"metadata": {},
"source": [
"#### RFM score"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "attempted-conservation",
"metadata": {},
"outputs": [],
"source": [
"# Manipulate the data type\n",
"rfm$Recency = as.numeric(rfm$Recency)\n",
"rfm$Frequency = as.numeric(rfm$Frequency)\n",
"rfm$Monetary = as.numeric(rfm$Monetary)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "weighted-rebecca",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>00012a2ce6f8dcda20d059ce98491703</td><td>2017-11-14 16:08:26 </td><td>338.0569 </td><td>1 </td><td>114.74 </td></tr>\n",
"\t<tr><td>000161a058600d5901f007fab4c27140</td><td>2017-07-16 09:40:32 </td><td>459.3262 </td><td>1 </td><td> 67.41 </td></tr>\n",
"\t<tr><td>0001fd6190edaaf884bcaf3d49edf079</td><td>2017-02-28 11:06:43 </td><td>597.2664 </td><td>1 </td><td>195.42 </td></tr>\n",
"\t<tr><td>0002414f95344307404f0ace7a26f1d5</td><td>2017-08-16 13:09:20 </td><td>428.1812 </td><td>1 </td><td>179.35 </td></tr>\n",
"\t<tr><td>000379cdec625522490c315e70c7a9fb</td><td>2018-04-02 13:42:17 </td><td>199.1583 </td><td>1 </td><td>107.01 </td></tr>\n",
"\t<tr><td>0004164d20a9e969af783496f3408652</td><td>2017-04-12 08:35:12 </td><td>554.3716 </td><td>1 </td><td> 71.80 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary\\\\\n",
"\\hline\n",
"\t 00012a2ce6f8dcda20d059ce98491703 & 2017-11-14 16:08:26 & 338.0569 & 1 & 114.74 \\\\\n",
"\t 000161a058600d5901f007fab4c27140 & 2017-07-16 09:40:32 & 459.3262 & 1 & 67.41 \\\\\n",
"\t 0001fd6190edaaf884bcaf3d49edf079 & 2017-02-28 11:06:43 & 597.2664 & 1 & 195.42 \\\\\n",
"\t 0002414f95344307404f0ace7a26f1d5 & 2017-08-16 13:09:20 & 428.1812 & 1 & 179.35 \\\\\n",
"\t 000379cdec625522490c315e70c7a9fb & 2018-04-02 13:42:17 & 199.1583 & 1 & 107.01 \\\\\n",
"\t 0004164d20a9e969af783496f3408652 & 2017-04-12 08:35:12 & 554.3716 & 1 & 71.80 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary |\n",
"|---|---|---|---|---|\n",
"| 00012a2ce6f8dcda20d059ce98491703 | 2017-11-14 16:08:26 | 338.0569 | 1 | 114.74 |\n",
"| 000161a058600d5901f007fab4c27140 | 2017-07-16 09:40:32 | 459.3262 | 1 | 67.41 |\n",
"| 0001fd6190edaaf884bcaf3d49edf079 | 2017-02-28 11:06:43 | 597.2664 | 1 | 195.42 |\n",
"| 0002414f95344307404f0ace7a26f1d5 | 2017-08-16 13:09:20 | 428.1812 | 1 | 179.35 |\n",
"| 000379cdec625522490c315e70c7a9fb | 2018-04-02 13:42:17 | 199.1583 | 1 | 107.01 |\n",
"| 0004164d20a9e969af783496f3408652 | 2017-04-12 08:35:12 | 554.3716 | 1 | 71.80 |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 00012a2ce6f8dcda20d059ce98491703 2017-11-14 16:08:26 338.0569 1 \n",
"2 000161a058600d5901f007fab4c27140 2017-07-16 09:40:32 459.3262 1 \n",
"3 0001fd6190edaaf884bcaf3d49edf079 2017-02-28 11:06:43 597.2664 1 \n",
"4 0002414f95344307404f0ace7a26f1d5 2017-08-16 13:09:20 428.1812 1 \n",
"5 000379cdec625522490c315e70c7a9fb 2018-04-02 13:42:17 199.1583 1 \n",
"6 0004164d20a9e969af783496f3408652 2017-04-12 08:35:12 554.3716 1 \n",
" Monetary\n",
"1 114.74 \n",
"2 67.41 \n",
"3 195.42 \n",
"4 179.35 \n",
"5 107.01 \n",
"6 71.80 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "fabulous-teach",
"metadata": {},
"outputs": [],
"source": [
"# Manipulate the RFM\n",
"rfm$R = cut(rfm$Recency, 4, labels = FALSE)\n",
"rfm$F = cut(rfm$Frequency, 4, labels = FALSE)\n",
"rfm$M = cut(rfm$Monetary, 4, labels = FALSE)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "infrared-reform",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th><th scope=col>R</th><th scope=col>F</th><th scope=col>M</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>5152585f73b24d675bd2e8316b4fa99d</td><td>2017-03-15 11:23:38 </td><td>582.2546 </td><td>11 </td><td> 107.27 </td><td>4 </td><td>2 </td><td>1 </td></tr>\n",
"\t<tr><td>55f7adf99fd2a2c01af34e2dfa272c9f</td><td>2017-03-11 18:34:44 </td><td>585.9553 </td><td>11 </td><td> 95.67 </td><td>4 </td><td>2 </td><td>1 </td></tr>\n",
"\t<tr><td>5967895f1299e02b1b0cb7a8ef4a437b</td><td>2017-01-28 17:59:37 </td><td>627.9796 </td><td>11 </td><td> 227.90 </td><td>4 </td><td>2 </td><td>1 </td></tr>\n",
"\t<tr><td>6ee2f17e3b6c33d6a9557f280edd2925</td><td>2017-03-09 23:39:26 </td><td>587.7437 </td><td>12 </td><td> 425.40 </td><td>4 </td><td>2 </td><td>1 </td></tr>\n",
"\t<tr><td>c6e2731c5b391845f6800c97401a43a9</td><td>2017-02-12 20:37:36 </td><td>612.8699 </td><td> 1 </td><td>6929.31 </td><td>4 </td><td>1 </td><td>3 </td></tr>\n",
"\t<tr><td>39d6658037b1b5a07d0a24d423f0bd19</td><td>2017-02-21 18:35:38 </td><td>603.9546 </td><td> 1 </td><td>3602.47 </td><td>4 </td><td>1 </td><td>2 </td></tr>\n",
"\t<tr><td>3be2c536886b2ea4668eced3a80dd0bb</td><td>2017-02-04 18:54:15 </td><td>620.9417 </td><td> 1 </td><td>4042.74 </td><td>4 </td><td>1 </td><td>2 </td></tr>\n",
"\t<tr><td>58acc4e2788bf6fc445fddcce9c1db03</td><td>2017-03-01 10:02:02 </td><td>596.3113 </td><td> 1 </td><td>3782.19 </td><td>4 </td><td>1 </td><td>2 </td></tr>\n",
"\t<tr><td>66657bf1753d82d0a76f2c4719ab8b85</td><td>2017-02-10 10:19:22 </td><td>615.2993 </td><td> 1 </td><td>3736.22 </td><td>4 </td><td>1 </td><td>2 </td></tr>\n",
"\t<tr><td>0001fd6190edaaf884bcaf3d49edf079</td><td>2017-02-28 11:06:43 </td><td>597.2664 </td><td> 1 </td><td> 195.42 </td><td>4 </td><td>1 </td><td>1 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary & R & F & M\\\\\n",
"\\hline\n",
"\t 5152585f73b24d675bd2e8316b4fa99d & 2017-03-15 11:23:38 & 582.2546 & 11 & 107.27 & 4 & 2 & 1 \\\\\n",
"\t 55f7adf99fd2a2c01af34e2dfa272c9f & 2017-03-11 18:34:44 & 585.9553 & 11 & 95.67 & 4 & 2 & 1 \\\\\n",
"\t 5967895f1299e02b1b0cb7a8ef4a437b & 2017-01-28 17:59:37 & 627.9796 & 11 & 227.90 & 4 & 2 & 1 \\\\\n",
"\t 6ee2f17e3b6c33d6a9557f280edd2925 & 2017-03-09 23:39:26 & 587.7437 & 12 & 425.40 & 4 & 2 & 1 \\\\\n",
"\t c6e2731c5b391845f6800c97401a43a9 & 2017-02-12 20:37:36 & 612.8699 & 1 & 6929.31 & 4 & 1 & 3 \\\\\n",
"\t 39d6658037b1b5a07d0a24d423f0bd19 & 2017-02-21 18:35:38 & 603.9546 & 1 & 3602.47 & 4 & 1 & 2 \\\\\n",
"\t 3be2c536886b2ea4668eced3a80dd0bb & 2017-02-04 18:54:15 & 620.9417 & 1 & 4042.74 & 4 & 1 & 2 \\\\\n",
"\t 58acc4e2788bf6fc445fddcce9c1db03 & 2017-03-01 10:02:02 & 596.3113 & 1 & 3782.19 & 4 & 1 & 2 \\\\\n",
"\t 66657bf1753d82d0a76f2c4719ab8b85 & 2017-02-10 10:19:22 & 615.2993 & 1 & 3736.22 & 4 & 1 & 2 \\\\\n",
"\t 0001fd6190edaaf884bcaf3d49edf079 & 2017-02-28 11:06:43 & 597.2664 & 1 & 195.42 & 4 & 1 & 1 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary | R | F | M |\n",
"|---|---|---|---|---|---|---|---|\n",
"| 5152585f73b24d675bd2e8316b4fa99d | 2017-03-15 11:23:38 | 582.2546 | 11 | 107.27 | 4 | 2 | 1 |\n",
"| 55f7adf99fd2a2c01af34e2dfa272c9f | 2017-03-11 18:34:44 | 585.9553 | 11 | 95.67 | 4 | 2 | 1 |\n",
"| 5967895f1299e02b1b0cb7a8ef4a437b | 2017-01-28 17:59:37 | 627.9796 | 11 | 227.90 | 4 | 2 | 1 |\n",
"| 6ee2f17e3b6c33d6a9557f280edd2925 | 2017-03-09 23:39:26 | 587.7437 | 12 | 425.40 | 4 | 2 | 1 |\n",
"| c6e2731c5b391845f6800c97401a43a9 | 2017-02-12 20:37:36 | 612.8699 | 1 | 6929.31 | 4 | 1 | 3 |\n",
"| 39d6658037b1b5a07d0a24d423f0bd19 | 2017-02-21 18:35:38 | 603.9546 | 1 | 3602.47 | 4 | 1 | 2 |\n",
"| 3be2c536886b2ea4668eced3a80dd0bb | 2017-02-04 18:54:15 | 620.9417 | 1 | 4042.74 | 4 | 1 | 2 |\n",
"| 58acc4e2788bf6fc445fddcce9c1db03 | 2017-03-01 10:02:02 | 596.3113 | 1 | 3782.19 | 4 | 1 | 2 |\n",
"| 66657bf1753d82d0a76f2c4719ab8b85 | 2017-02-10 10:19:22 | 615.2993 | 1 | 3736.22 | 4 | 1 | 2 |\n",
"| 0001fd6190edaaf884bcaf3d49edf079 | 2017-02-28 11:06:43 | 597.2664 | 1 | 195.42 | 4 | 1 | 1 |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 5152585f73b24d675bd2e8316b4fa99d 2017-03-15 11:23:38 582.2546 11 \n",
"2 55f7adf99fd2a2c01af34e2dfa272c9f 2017-03-11 18:34:44 585.9553 11 \n",
"3 5967895f1299e02b1b0cb7a8ef4a437b 2017-01-28 17:59:37 627.9796 11 \n",
"4 6ee2f17e3b6c33d6a9557f280edd2925 2017-03-09 23:39:26 587.7437 12 \n",
"5 c6e2731c5b391845f6800c97401a43a9 2017-02-12 20:37:36 612.8699 1 \n",
"6 39d6658037b1b5a07d0a24d423f0bd19 2017-02-21 18:35:38 603.9546 1 \n",
"7 3be2c536886b2ea4668eced3a80dd0bb 2017-02-04 18:54:15 620.9417 1 \n",
"8 58acc4e2788bf6fc445fddcce9c1db03 2017-03-01 10:02:02 596.3113 1 \n",
"9 66657bf1753d82d0a76f2c4719ab8b85 2017-02-10 10:19:22 615.2993 1 \n",
"10 0001fd6190edaaf884bcaf3d49edf079 2017-02-28 11:06:43 597.2664 1 \n",
" Monetary R F M\n",
"1 107.27 4 2 1\n",
"2 95.67 4 2 1\n",
"3 227.90 4 2 1\n",
"4 425.40 4 2 1\n",
"5 6929.31 4 1 3\n",
"6 3602.47 4 1 2\n",
"7 4042.74 4 1 2\n",
"8 3782.19 4 1 2\n",
"9 3736.22 4 1 2\n",
"10 195.42 4 1 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Review the top 10\n",
"head(rfm[with(rfm, order(-R, -F, -M)),], n = 10)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "advanced-register",
"metadata": {
"code_folding": []
},
"outputs": [],
"source": [
"# Create a customer segment\n",
"rfm$`RFM Segment` = paste(rfm$R, rfm$F, rfm$M, sep = '')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "responsible-screening",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th><th scope=col>R</th><th scope=col>F</th><th scope=col>M</th><th scope=col>RFM Segment</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>00012a2ce6f8dcda20d059ce98491703</td><td>2017-11-14 16:08:26 </td><td>338.0569 </td><td>1 </td><td>114.74 </td><td>2 </td><td>1 </td><td>1 </td><td>211 </td></tr>\n",
"\t<tr><td>000161a058600d5901f007fab4c27140</td><td>2017-07-16 09:40:32 </td><td>459.3262 </td><td>1 </td><td> 67.41 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td></tr>\n",
"\t<tr><td>0001fd6190edaaf884bcaf3d49edf079</td><td>2017-02-28 11:06:43 </td><td>597.2664 </td><td>1 </td><td>195.42 </td><td>4 </td><td>1 </td><td>1 </td><td>411 </td></tr>\n",
"\t<tr><td>0002414f95344307404f0ace7a26f1d5</td><td>2017-08-16 13:09:20 </td><td>428.1812 </td><td>1 </td><td>179.35 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td></tr>\n",
"\t<tr><td>000379cdec625522490c315e70c7a9fb</td><td>2018-04-02 13:42:17 </td><td>199.1583 </td><td>1 </td><td>107.01 </td><td>2 </td><td>1 </td><td>1 </td><td>211 </td></tr>\n",
"\t<tr><td>0004164d20a9e969af783496f3408652</td><td>2017-04-12 08:35:12 </td><td>554.3716 </td><td>1 </td><td> 71.80 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary & R & F & M & RFM Segment\\\\\n",
"\\hline\n",
"\t 00012a2ce6f8dcda20d059ce98491703 & 2017-11-14 16:08:26 & 338.0569 & 1 & 114.74 & 2 & 1 & 1 & 211 \\\\\n",
"\t 000161a058600d5901f007fab4c27140 & 2017-07-16 09:40:32 & 459.3262 & 1 & 67.41 & 3 & 1 & 1 & 311 \\\\\n",
"\t 0001fd6190edaaf884bcaf3d49edf079 & 2017-02-28 11:06:43 & 597.2664 & 1 & 195.42 & 4 & 1 & 1 & 411 \\\\\n",
"\t 0002414f95344307404f0ace7a26f1d5 & 2017-08-16 13:09:20 & 428.1812 & 1 & 179.35 & 3 & 1 & 1 & 311 \\\\\n",
"\t 000379cdec625522490c315e70c7a9fb & 2018-04-02 13:42:17 & 199.1583 & 1 & 107.01 & 2 & 1 & 1 & 211 \\\\\n",
"\t 0004164d20a9e969af783496f3408652 & 2017-04-12 08:35:12 & 554.3716 & 1 & 71.80 & 3 & 1 & 1 & 311 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary | R | F | M | RFM Segment |\n",
"|---|---|---|---|---|---|---|---|---|\n",
"| 00012a2ce6f8dcda20d059ce98491703 | 2017-11-14 16:08:26 | 338.0569 | 1 | 114.74 | 2 | 1 | 1 | 211 |\n",
"| 000161a058600d5901f007fab4c27140 | 2017-07-16 09:40:32 | 459.3262 | 1 | 67.41 | 3 | 1 | 1 | 311 |\n",
"| 0001fd6190edaaf884bcaf3d49edf079 | 2017-02-28 11:06:43 | 597.2664 | 1 | 195.42 | 4 | 1 | 1 | 411 |\n",
"| 0002414f95344307404f0ace7a26f1d5 | 2017-08-16 13:09:20 | 428.1812 | 1 | 179.35 | 3 | 1 | 1 | 311 |\n",
"| 000379cdec625522490c315e70c7a9fb | 2018-04-02 13:42:17 | 199.1583 | 1 | 107.01 | 2 | 1 | 1 | 211 |\n",
"| 0004164d20a9e969af783496f3408652 | 2017-04-12 08:35:12 | 554.3716 | 1 | 71.80 | 3 | 1 | 1 | 311 |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 00012a2ce6f8dcda20d059ce98491703 2017-11-14 16:08:26 338.0569 1 \n",
"2 000161a058600d5901f007fab4c27140 2017-07-16 09:40:32 459.3262 1 \n",
"3 0001fd6190edaaf884bcaf3d49edf079 2017-02-28 11:06:43 597.2664 1 \n",
"4 0002414f95344307404f0ace7a26f1d5 2017-08-16 13:09:20 428.1812 1 \n",
"5 000379cdec625522490c315e70c7a9fb 2018-04-02 13:42:17 199.1583 1 \n",
"6 0004164d20a9e969af783496f3408652 2017-04-12 08:35:12 554.3716 1 \n",
" Monetary R F M RFM Segment\n",
"1 114.74 2 1 1 211 \n",
"2 67.41 3 1 1 311 \n",
"3 195.42 4 1 1 411 \n",
"4 179.35 3 1 1 311 \n",
"5 107.01 2 1 1 211 \n",
"6 71.80 3 1 1 311 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "sought-activity",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"18"
],
"text/latex": [
"18"
],
"text/markdown": [
"18"
],
"text/plain": [
"[1] 18"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>RFM Segment</th><th scope=col>Count</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>111 </td><td>31296</td></tr>\n",
"\t<tr><td>112 </td><td> 8</td></tr>\n",
"\t<tr><td>113 </td><td> 2</td></tr>\n",
"\t<tr><td>121 </td><td> 2</td></tr>\n",
"\t<tr><td>211 </td><td>41228</td></tr>\n",
"\t<tr><td>212 </td><td> 4</td></tr>\n",
"\t<tr><td>214 </td><td> 1</td></tr>\n",
"\t<tr><td>221 </td><td> 8</td></tr>\n",
"\t<tr><td>231 </td><td> 1</td></tr>\n",
"\t<tr><td>311 </td><td>22554</td></tr>\n",
"\t<tr><td>312 </td><td> 6</td></tr>\n",
"\t<tr><td>321 </td><td> 13</td></tr>\n",
"\t<tr><td>331 </td><td> 2</td></tr>\n",
"\t<tr><td>341 </td><td> 2</td></tr>\n",
"\t<tr><td>411 </td><td> 4305</td></tr>\n",
"\t<tr><td>412 </td><td> 4</td></tr>\n",
"\t<tr><td>413 </td><td> 1</td></tr>\n",
"\t<tr><td>421 </td><td> 4</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|ll}\n",
" RFM Segment & Count\\\\\n",
"\\hline\n",
"\t 111 & 31296\\\\\n",
"\t 112 & 8\\\\\n",
"\t 113 & 2\\\\\n",
"\t 121 & 2\\\\\n",
"\t 211 & 41228\\\\\n",
"\t 212 & 4\\\\\n",
"\t 214 & 1\\\\\n",
"\t 221 & 8\\\\\n",
"\t 231 & 1\\\\\n",
"\t 311 & 22554\\\\\n",
"\t 312 & 6\\\\\n",
"\t 321 & 13\\\\\n",
"\t 331 & 2\\\\\n",
"\t 341 & 2\\\\\n",
"\t 411 & 4305\\\\\n",
"\t 412 & 4\\\\\n",
"\t 413 & 1\\\\\n",
"\t 421 & 4\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| RFM Segment | Count |\n",
"|---|---|\n",
"| 111 | 31296 |\n",
"| 112 | 8 |\n",
"| 113 | 2 |\n",
"| 121 | 2 |\n",
"| 211 | 41228 |\n",
"| 212 | 4 |\n",
"| 214 | 1 |\n",
"| 221 | 8 |\n",
"| 231 | 1 |\n",
"| 311 | 22554 |\n",
"| 312 | 6 |\n",
"| 321 | 13 |\n",
"| 331 | 2 |\n",
"| 341 | 2 |\n",
"| 411 | 4305 |\n",
"| 412 | 4 |\n",
"| 413 | 1 |\n",
"| 421 | 4 |\n",
"\n"
],
"text/plain": [
" RFM Segment Count\n",
"1 111 31296\n",
"2 112 8\n",
"3 113 2\n",
"4 121 2\n",
"5 211 41228\n",
"6 212 4\n",
"7 214 1\n",
"8 221 8\n",
"9 231 1\n",
"10 311 22554\n",
"11 312 6\n",
"12 321 13\n",
"13 331 2\n",
"14 341 2\n",
"15 411 4305\n",
"16 412 4\n",
"17 413 1\n",
"18 421 4"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Count number of unique segments\n",
"length(unique(rfm$`RFM Segment`))\n",
"rfm %>%\n",
" group_by(`RFM Segment`) %>%\n",
" summarize(\n",
" Count = n()\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "sonic-seafood",
"metadata": {},
"outputs": [],
"source": [
"# Calculate the RFM score\n",
"rfm$`RFM Score` = rfm$R + rfm$F + rfm$M"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "indie-lexington",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>RFM Score</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>92cd3ec6e2d643d4ebd0e3d6238f69e2</td><td>8 </td></tr>\n",
"\t<tr><td>9af2372a1e49340278e7c1ef8d749f34</td><td>8 </td></tr>\n",
"\t<tr><td>c6e2731c5b391845f6800c97401a43a9</td><td>8 </td></tr>\n",
"\t<tr><td>13aa59158da63ba0e93ec6ac2c07aacb</td><td>7 </td></tr>\n",
"\t<tr><td>1617b1357756262bfa56ab541c47bc16</td><td>7 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|ll}\n",
" customer\\_id & RFM Score\\\\\n",
"\\hline\n",
"\t 92cd3ec6e2d643d4ebd0e3d6238f69e2 & 8 \\\\\n",
"\t 9af2372a1e49340278e7c1ef8d749f34 & 8 \\\\\n",
"\t c6e2731c5b391845f6800c97401a43a9 & 8 \\\\\n",
"\t 13aa59158da63ba0e93ec6ac2c07aacb & 7 \\\\\n",
"\t 1617b1357756262bfa56ab541c47bc16 & 7 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | RFM Score |\n",
"|---|---|\n",
"| 92cd3ec6e2d643d4ebd0e3d6238f69e2 | 8 |\n",
"| 9af2372a1e49340278e7c1ef8d749f34 | 8 |\n",
"| c6e2731c5b391845f6800c97401a43a9 | 8 |\n",
"| 13aa59158da63ba0e93ec6ac2c07aacb | 7 |\n",
"| 1617b1357756262bfa56ab541c47bc16 | 7 |\n",
"\n"
],
"text/plain": [
" customer_id RFM Score\n",
"1 92cd3ec6e2d643d4ebd0e3d6238f69e2 8 \n",
"2 9af2372a1e49340278e7c1ef8d749f34 8 \n",
"3 c6e2731c5b391845f6800c97401a43a9 8 \n",
"4 13aa59158da63ba0e93ec6ac2c07aacb 7 \n",
"5 1617b1357756262bfa56ab541c47bc16 7 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm[with(rfm, order(-`RFM Score`)),c('customer_id', 'RFM Score')], n = 5)"
]
},
{
"cell_type": "markdown",
"id": "signed-bunch",
"metadata": {},
"source": [
"#### Create a customer segments"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "uniform-hazard",
"metadata": {},
"outputs": [],
"source": [
"# List of segments\n",
"champions = c(444)\n",
"loyal_customers = c(334, 342, 343, 344, 433, 434, 443)\n",
"potential_loyalist = c(332, 333, 341, 412, 413, 414, 431, 432, 441, 442, 421, 422, 423, 424)\n",
"recent_customers = c(411)\n",
"promising = c(311, 312, 313, 331)\n",
"needing_attention = c(212, 213, 214, 231, 232, 233, 241, 314, 321, 322, 323, 324)\n",
"about_to_sleep = c(211)\n",
"at_risk = c(112, 113, 114, 131, 132, 133, 142, 124, 123, 122, 121, 224, 223, 222, 221)\n",
"cant_lose = c(134, 143, 144, 234, 242, 243, 244)\n",
"hibernating = c(141)\n",
"lost = c(111)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "experienced-individual",
"metadata": {},
"outputs": [],
"source": [
"# Assign customer segment\n",
"rfm_scores = as.vector(rfm$`RFM Segment`)\n",
"rfm_scores[which(rfm_scores %in% champions)] = 'Champions'\n",
"rfm_scores[which(rfm_scores %in% potential_loyalist)] = 'Potential Loyalist'\n",
"rfm_scores[which(rfm_scores %in% loyal_customers)] = 'Loyal Customers'\n",
"rfm_scores[which(rfm_scores %in% recent_customers)] = 'Recent Customers'\n",
"rfm_scores[which(rfm_scores %in% promising)] = 'Promising'\n",
"rfm_scores[which(rfm_scores %in% needing_attention)] = 'Customer Needing Attention'\n",
"rfm_scores[which(rfm_scores %in% about_to_sleep)] = 'About to Sleep'\n",
"rfm_scores[which(rfm_scores %in% at_risk)] = 'At Risk'\n",
"rfm_scores[which(rfm_scores %in% cant_lose)] = 'Cant Lose Them'\n",
"rfm_scores[which(rfm_scores %in% hibernating)] = 'Hibernating'\n",
"rfm_scores[which(rfm_scores %in% lost)] = 'Lost'"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "freelance-advice",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>Customer Segment</th><th scope=col>Count</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>About to Sleep </td><td>41228 </td></tr>\n",
"\t<tr><td>Lost </td><td>31296 </td></tr>\n",
"\t<tr><td>Promising </td><td>22562 </td></tr>\n",
"\t<tr><td>Recent Customers </td><td> 4305 </td></tr>\n",
"\t<tr><td>At Risk </td><td> 20 </td></tr>\n",
"\t<tr><td>Customer Needing Attention</td><td> 19 </td></tr>\n",
"\t<tr><td>Potential Loyalist </td><td> 11 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|ll}\n",
" Customer Segment & Count\\\\\n",
"\\hline\n",
"\t About to Sleep & 41228 \\\\\n",
"\t Lost & 31296 \\\\\n",
"\t Promising & 22562 \\\\\n",
"\t Recent Customers & 4305 \\\\\n",
"\t At Risk & 20 \\\\\n",
"\t Customer Needing Attention & 19 \\\\\n",
"\t Potential Loyalist & 11 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| Customer Segment | Count |\n",
"|---|---|\n",
"| About to Sleep | 41228 |\n",
"| Lost | 31296 |\n",
"| Promising | 22562 |\n",
"| Recent Customers | 4305 |\n",
"| At Risk | 20 |\n",
"| Customer Needing Attention | 19 |\n",
"| Potential Loyalist | 11 |\n",
"\n"
],
"text/plain": [
" Customer Segment Count\n",
"1 About to Sleep 41228\n",
"2 Lost 31296\n",
"3 Promising 22562\n",
"4 Recent Customers 4305\n",
"5 At Risk 20\n",
"6 Customer Needing Attention 19\n",
"7 Potential Loyalist 11"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"customer_sement = data.frame(cus_seg = rfm_scores)\n",
"customer_sement %>%\n",
" count(cus_seg) %>% \n",
" arrange(desc(n)) %>% \n",
" rename(`Customer Segment` = cus_seg, Count = n)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "sitting-integral",
"metadata": {},
"outputs": [],
"source": [
"# Assign the customer segment into the RFM table\n",
"rfm = rfm %>% \n",
" mutate(`Customer Segment` = customer_sement$cus_seg)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "protective-exhibition",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th><th scope=col>R</th><th scope=col>F</th><th scope=col>M</th><th scope=col>RFM Segment</th><th scope=col>RFM Score</th><th scope=col>Customer Segment</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>00012a2ce6f8dcda20d059ce98491703</td><td>2017-11-14 16:08:26 </td><td>338.0569 </td><td>1 </td><td>114.74 </td><td>2 </td><td>1 </td><td>1 </td><td>211 </td><td>4 </td><td>About to Sleep </td></tr>\n",
"\t<tr><td>000161a058600d5901f007fab4c27140</td><td>2017-07-16 09:40:32 </td><td>459.3262 </td><td>1 </td><td> 67.41 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td><td>5 </td><td>Promising </td></tr>\n",
"\t<tr><td>0001fd6190edaaf884bcaf3d49edf079</td><td>2017-02-28 11:06:43 </td><td>597.2664 </td><td>1 </td><td>195.42 </td><td>4 </td><td>1 </td><td>1 </td><td>411 </td><td>6 </td><td>Recent Customers </td></tr>\n",
"\t<tr><td>0002414f95344307404f0ace7a26f1d5</td><td>2017-08-16 13:09:20 </td><td>428.1812 </td><td>1 </td><td>179.35 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td><td>5 </td><td>Promising </td></tr>\n",
"\t<tr><td>000379cdec625522490c315e70c7a9fb</td><td>2018-04-02 13:42:17 </td><td>199.1583 </td><td>1 </td><td>107.01 </td><td>2 </td><td>1 </td><td>1 </td><td>211 </td><td>4 </td><td>About to Sleep </td></tr>\n",
"\t<tr><td>0004164d20a9e969af783496f3408652</td><td>2017-04-12 08:35:12 </td><td>554.3716 </td><td>1 </td><td> 71.80 </td><td>3 </td><td>1 </td><td>1 </td><td>311 </td><td>5 </td><td>Promising </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary & R & F & M & RFM Segment & RFM Score & Customer Segment\\\\\n",
"\\hline\n",
"\t 00012a2ce6f8dcda20d059ce98491703 & 2017-11-14 16:08:26 & 338.0569 & 1 & 114.74 & 2 & 1 & 1 & 211 & 4 & About to Sleep \\\\\n",
"\t 000161a058600d5901f007fab4c27140 & 2017-07-16 09:40:32 & 459.3262 & 1 & 67.41 & 3 & 1 & 1 & 311 & 5 & Promising \\\\\n",
"\t 0001fd6190edaaf884bcaf3d49edf079 & 2017-02-28 11:06:43 & 597.2664 & 1 & 195.42 & 4 & 1 & 1 & 411 & 6 & Recent Customers \\\\\n",
"\t 0002414f95344307404f0ace7a26f1d5 & 2017-08-16 13:09:20 & 428.1812 & 1 & 179.35 & 3 & 1 & 1 & 311 & 5 & Promising \\\\\n",
"\t 000379cdec625522490c315e70c7a9fb & 2018-04-02 13:42:17 & 199.1583 & 1 & 107.01 & 2 & 1 & 1 & 211 & 4 & About to Sleep \\\\\n",
"\t 0004164d20a9e969af783496f3408652 & 2017-04-12 08:35:12 & 554.3716 & 1 & 71.80 & 3 & 1 & 1 & 311 & 5 & Promising \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary | R | F | M | RFM Segment | RFM Score | Customer Segment |\n",
"|---|---|---|---|---|---|---|---|---|---|---|\n",
"| 00012a2ce6f8dcda20d059ce98491703 | 2017-11-14 16:08:26 | 338.0569 | 1 | 114.74 | 2 | 1 | 1 | 211 | 4 | About to Sleep |\n",
"| 000161a058600d5901f007fab4c27140 | 2017-07-16 09:40:32 | 459.3262 | 1 | 67.41 | 3 | 1 | 1 | 311 | 5 | Promising |\n",
"| 0001fd6190edaaf884bcaf3d49edf079 | 2017-02-28 11:06:43 | 597.2664 | 1 | 195.42 | 4 | 1 | 1 | 411 | 6 | Recent Customers |\n",
"| 0002414f95344307404f0ace7a26f1d5 | 2017-08-16 13:09:20 | 428.1812 | 1 | 179.35 | 3 | 1 | 1 | 311 | 5 | Promising |\n",
"| 000379cdec625522490c315e70c7a9fb | 2018-04-02 13:42:17 | 199.1583 | 1 | 107.01 | 2 | 1 | 1 | 211 | 4 | About to Sleep |\n",
"| 0004164d20a9e969af783496f3408652 | 2017-04-12 08:35:12 | 554.3716 | 1 | 71.80 | 3 | 1 | 1 | 311 | 5 | Promising |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 00012a2ce6f8dcda20d059ce98491703 2017-11-14 16:08:26 338.0569 1 \n",
"2 000161a058600d5901f007fab4c27140 2017-07-16 09:40:32 459.3262 1 \n",
"3 0001fd6190edaaf884bcaf3d49edf079 2017-02-28 11:06:43 597.2664 1 \n",
"4 0002414f95344307404f0ace7a26f1d5 2017-08-16 13:09:20 428.1812 1 \n",
"5 000379cdec625522490c315e70c7a9fb 2018-04-02 13:42:17 199.1583 1 \n",
"6 0004164d20a9e969af783496f3408652 2017-04-12 08:35:12 554.3716 1 \n",
" Monetary R F M RFM Segment RFM Score Customer Segment\n",
"1 114.74 2 1 1 211 4 About to Sleep \n",
"2 67.41 3 1 1 311 5 Promising \n",
"3 195.42 4 1 1 411 6 Recent Customers\n",
"4 179.35 3 1 1 311 5 Promising \n",
"5 107.01 2 1 1 211 4 About to Sleep \n",
"6 71.80 3 1 1 311 5 Promising "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm)"
]
},
{
"cell_type": "markdown",
"id": "residential-philosophy",
"metadata": {},
"source": [
"#### Pareto analysis"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "liberal-wheel",
"metadata": {},
"outputs": [],
"source": [
"rfm = rfm[order(-rfm$Monetary),]\n",
"# Apply Pareto principle\n",
"pareto_cutoff = 0.8 * sum(rfm$Monetary)\n",
"rfm$Pareto = ifelse(cumsum(rfm$Monetary) <= pareto_cutoff, 'Top 20%', 'Bottom 80%')\n",
"rfm$Pareto = factor(rfm$Pareto, levels = c('Top 20%', 'Bottom 80%'), ordered = TRUE)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "multiple-broadway",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\n",
" Top 20% Bottom 80% \n",
" 0.49 0.51 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"round(prop.table(table(rfm$Pareto)), 2)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "minute-grave",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>customer_id</th><th scope=col>Last Purchase</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary</th><th scope=col>R</th><th scope=col>F</th><th scope=col>M</th><th scope=col>RFM Segment</th><th scope=col>RFM Score</th><th scope=col>Customer Segment</th><th scope=col>Pareto</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>1617b1357756262bfa56ab541c47bc16</td><td>2017-09-29 15:24:52 </td><td>384.08711 </td><td>1 </td><td>13664.08 </td><td>2 </td><td>1 </td><td>4 </td><td>214 </td><td>7 </td><td>Customer Needing Attention </td><td>Top 20% </td></tr>\n",
"\t<tr><td>ec5b2ba62e574342386871631fafd3fc</td><td>2018-07-15 14:49:44 </td><td> 95.11150 </td><td>1 </td><td> 7274.88 </td><td>1 </td><td>1 </td><td>3 </td><td>113 </td><td>5 </td><td>At Risk </td><td>Top 20% </td></tr>\n",
"\t<tr><td>c6e2731c5b391845f6800c97401a43a9</td><td>2017-02-12 20:37:36 </td><td>612.86993 </td><td>1 </td><td> 6929.31 </td><td>4 </td><td>1 </td><td>3 </td><td>413 </td><td>8 </td><td>Potential Loyalist </td><td>Top 20% </td></tr>\n",
"\t<tr><td>f48d464a0baaea338cb25f816991ab1f</td><td>2018-07-25 18:10:17 </td><td> 84.97223 </td><td>1 </td><td> 6922.21 </td><td>1 </td><td>1 </td><td>3 </td><td>113 </td><td>5 </td><td>At Risk </td><td>Top 20% </td></tr>\n",
"\t<tr><td>3fd6777bbce08a352fddd04e4a7cc8f6</td><td>2017-05-24 18:14:34 </td><td>511.96926 </td><td>1 </td><td> 6726.66 </td><td>3 </td><td>1 </td><td>2 </td><td>312 </td><td>6 </td><td>Promising </td><td>Top 20% </td></tr>\n",
"\t<tr><td>05455dfa7cd02f13d132aa7a6a9729c6</td><td>2017-11-24 11:03:35 </td><td>328.26855 </td><td>1 </td><td> 6081.54 </td><td>2 </td><td>1 </td><td>2 </td><td>212 </td><td>5 </td><td>Customer Needing Attention </td><td>Top 20% </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllllllllll}\n",
" customer\\_id & Last Purchase & Recency & Frequency & Monetary & R & F & M & RFM Segment & RFM Score & Customer Segment & Pareto\\\\\n",
"\\hline\n",
"\t 1617b1357756262bfa56ab541c47bc16 & 2017-09-29 15:24:52 & 384.08711 & 1 & 13664.08 & 2 & 1 & 4 & 214 & 7 & Customer Needing Attention & Top 20\\% \\\\\n",
"\t ec5b2ba62e574342386871631fafd3fc & 2018-07-15 14:49:44 & 95.11150 & 1 & 7274.88 & 1 & 1 & 3 & 113 & 5 & At Risk & Top 20\\% \\\\\n",
"\t c6e2731c5b391845f6800c97401a43a9 & 2017-02-12 20:37:36 & 612.86993 & 1 & 6929.31 & 4 & 1 & 3 & 413 & 8 & Potential Loyalist & Top 20\\% \\\\\n",
"\t f48d464a0baaea338cb25f816991ab1f & 2018-07-25 18:10:17 & 84.97223 & 1 & 6922.21 & 1 & 1 & 3 & 113 & 5 & At Risk & Top 20\\% \\\\\n",
"\t 3fd6777bbce08a352fddd04e4a7cc8f6 & 2017-05-24 18:14:34 & 511.96926 & 1 & 6726.66 & 3 & 1 & 2 & 312 & 6 & Promising & Top 20\\% \\\\\n",
"\t 05455dfa7cd02f13d132aa7a6a9729c6 & 2017-11-24 11:03:35 & 328.26855 & 1 & 6081.54 & 2 & 1 & 2 & 212 & 5 & Customer Needing Attention & Top 20\\% \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| customer_id | Last Purchase | Recency | Frequency | Monetary | R | F | M | RFM Segment | RFM Score | Customer Segment | Pareto |\n",
"|---|---|---|---|---|---|---|---|---|---|---|---|\n",
"| 1617b1357756262bfa56ab541c47bc16 | 2017-09-29 15:24:52 | 384.08711 | 1 | 13664.08 | 2 | 1 | 4 | 214 | 7 | Customer Needing Attention | Top 20% |\n",
"| ec5b2ba62e574342386871631fafd3fc | 2018-07-15 14:49:44 | 95.11150 | 1 | 7274.88 | 1 | 1 | 3 | 113 | 5 | At Risk | Top 20% |\n",
"| c6e2731c5b391845f6800c97401a43a9 | 2017-02-12 20:37:36 | 612.86993 | 1 | 6929.31 | 4 | 1 | 3 | 413 | 8 | Potential Loyalist | Top 20% |\n",
"| f48d464a0baaea338cb25f816991ab1f | 2018-07-25 18:10:17 | 84.97223 | 1 | 6922.21 | 1 | 1 | 3 | 113 | 5 | At Risk | Top 20% |\n",
"| 3fd6777bbce08a352fddd04e4a7cc8f6 | 2017-05-24 18:14:34 | 511.96926 | 1 | 6726.66 | 3 | 1 | 2 | 312 | 6 | Promising | Top 20% |\n",
"| 05455dfa7cd02f13d132aa7a6a9729c6 | 2017-11-24 11:03:35 | 328.26855 | 1 | 6081.54 | 2 | 1 | 2 | 212 | 5 | Customer Needing Attention | Top 20% |\n",
"\n"
],
"text/plain": [
" customer_id Last Purchase Recency Frequency\n",
"1 1617b1357756262bfa56ab541c47bc16 2017-09-29 15:24:52 384.08711 1 \n",
"2 ec5b2ba62e574342386871631fafd3fc 2018-07-15 14:49:44 95.11150 1 \n",
"3 c6e2731c5b391845f6800c97401a43a9 2017-02-12 20:37:36 612.86993 1 \n",
"4 f48d464a0baaea338cb25f816991ab1f 2018-07-25 18:10:17 84.97223 1 \n",
"5 3fd6777bbce08a352fddd04e4a7cc8f6 2017-05-24 18:14:34 511.96926 1 \n",
"6 05455dfa7cd02f13d132aa7a6a9729c6 2017-11-24 11:03:35 328.26855 1 \n",
" Monetary R F M RFM Segment RFM Score Customer Segment Pareto \n",
"1 13664.08 2 1 4 214 7 Customer Needing Attention Top 20%\n",
"2 7274.88 1 1 3 113 5 At Risk Top 20%\n",
"3 6929.31 4 1 3 413 8 Potential Loyalist Top 20%\n",
"4 6922.21 1 1 3 113 5 At Risk Top 20%\n",
"5 6726.66 3 1 2 312 6 Promising Top 20%\n",
"6 6081.54 2 1 2 212 5 Customer Needing Attention Top 20%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"head(rfm)"
]
},
{
"cell_type": "markdown",
"id": "dense-columbus",
"metadata": {},
"source": [
"### 7 Data viz"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "disabled-tribune",
"metadata": {},
"outputs": [],
"source": [
"# Figure size\n",
"fig <- function(width, heigth){\n",
" options(repr.plot.width = width, repr.plot.height = heigth)\n",
"}\n",
"fig(10, 4)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "transsexual-blade",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Min. 1st Qu. Median Mean 3rd Qu. Max. \n",
" 1.0 167.1 272.8 291.4 401.1 773.8 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(rfm$Recency)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "aquatic-colonial",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAHgCAMAAACCSWStAAAAOVBMVEUAAAAzMzNNTU1oaGh8\nfHyMjIyampqnp6eysrK9vb3CLW3Hx8fQ0NDZ2dnh4eHp6enr6+vw8PD///+W7QIGAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2di3aqSBQFGXwlN1Gj//+xI6DyEJTuPk1voGqt\nmTxUKLVPLfQaza4AADMhSy0AADAWggUAs4FgAcBsIFgAMBsIFgDMBoIFALOBYAHAbCBYADAb\nCBYAzAaCBQCzwTZYWUW+P91/bJ982bfO23OO1hkHThzmss+yTePnn91NZvf79hKOu7jTr3a/\n+tnmcPHbLAC8JUqwbhyqH7snd38YaFL1a+dgFX3aPn865XeX7fAlnHfx9nL11c8pFkAErINV\nfjl/Z9nX8Mlvf/Pu1593f6p/ON0Oro63r8dttntzCa8dDQar+nrb5cFvuwDwjijBKmvRc4wR\nP1iNHzbZ9/27bTb4qNA3WHn+dmunrPd0AAgjUrCuh+IQq/rxtC+e1TreHzEVXy6b20HP4yHh\nV55tfxsXvn15nvFaXT5/PCt2+80hzzbN/tSnZveLVfzWx1Wn4nin3vqrUXcfX9U+vm9fqujd\nDpmekqX8btfczOvVv39XX+4mdPt+f3nZXOMK3c9xeTwPd2k9IQcA0YJ1KnpR/ni8P63zW3do\nVzzHdQ/W4fmU10Cwfp+XL36zfX5f0Ti1Haxd57CqEawXo84+vsrvj/vyS1Gsn/p5ubv84au5\nmZerfz/CalzuWl3P7q+bV+h5jsN9kz+9j6sBVkysYF2fxdlkP9di+Db1c+nby+O8twG9nfqb\nF08+NZLSeNL99uDy63bUcZvmc3n24/Wyq59Gb53aeoCXdx6TNrb+YtTdx28Rjbz6silO3t4O\no07bqorbx3Ybm+lc/WNe1qh5uVOx1Uv53FZ7c88rVJ/jfN/ktrxSAPAkfrA6vyv+f3z+kJVD\n//KgrRGsw/356311luLY49J85Nk4tRWsgX+hbDzUrH/bv4/n49RD1b5LddB47GyxtY8H22qz\n9eX25aFa+SCvvbnnFWqcY3f/LY8IAdrED9Yuy/c/58bJzWeTHs/N10c73WBt7ocZ585ZKlqn\njg3Wi1FnH5fO+TfPDrU229jMcx8V92e+mpfb1Ad8PZvrnKN8PM0jQoAX4gUrv/94zp8z3Bes\n+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\nsABgNvwPF1JqoeOL/0IAAAAASUVORK5CYII=",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Visualize the RFM - Recency\n",
"ggplot(data = rfm)+\n",
" geom_density(aes(x = Recency),\n",
" fill = '#c22d6d',\n",
" col = 'white')+\n",
" labs(title = \"Distribution of Customer's Recency\",\n",
" subtitle = 'Olist Customer Data')+\n",
" xlab('Recency')+\n",
" ylab('Density')+\n",
" theme_bw()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "quality-blade",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Min. 1st Qu. Median Mean 3rd Qu. Max. \n",
" 1.000 1.000 1.000 1.039 1.000 25.000 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(rfm$Frequency)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "educated-processor",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nRFtY1aUc2u8crhcUf0sxIcRRPiqsbgfsUVaPK0pcoq88zgd7al1h9ec8lN2zrS9ksy+v3XCo\nr/J+LJ86hGpL7DBaYnuViWu7hdc9JIS4ygqFlT2+Vv3bwurPWV0tsLlUYHUl1PujjqpZ2mve\n9JfYHMw6l9/n3j79eEgIcZUVCqu8mNXmNpo8eNV4znjLK37u8e+BvcX0C2vbn6N9SAhxlWWO\nYV3iY1j1tWkucb+0M+aXuJj6c75VWJW8D5vT+dbO0T0khLjKUv9K+NU/D+vU75fHvxJesn3z\n9G08Z7xLmEc/NlMbao+7u/rYVh5fEb57SAhxlYXOw6r/De9xZOpSX7p+6jysa31N+ft2PGd8\n0D2PfhzKp74G143vzsOqHlyaJTYvejwkhLjKZ3/Vt83Eme71yQrH8kE2nLH8V75q+nE8Z3xa\nQx79qJ+Pripfve9HLo8lNjuNWfyQEOIqn/5VnyY+S3jIyoscl3t70Sf7zvvs8VnCYvpxas74\nxNH4R/l8dbHoUWFtDvV57tUM5dR6Qe1DQoir8FdNCEkmFBYhJJlQWISQZEJhEUKSCYVFCEkm\nFBYhJJlQWISQZEJhEUKSCYVFCEkmFBYhJJlQWISQZEJhEUKSySeF9R8hhPxClims5vbfB8uY\nmV+knA4LKh3K6bDeoCgsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsK\nytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsK\nytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsK\nytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsK\nytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsK\nytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSpigsLQsKytjSphYqrH+z\nk89/CSHkj4ctLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYo\nLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qYoLC0LCsrY0qZmFFZWJX4wWor2WFOwoKCMLW1q\n7hZWNrjtL0V7rClYUFDGljY1s7Cy0Z3eUrTHmoIFBWVsaVNvFla/rygsKCgvljY1r7C6Daz2\nENZ/Vf7NTvFuCSFkVt4trN4jtrCgoLxY2tSbhTV4RGFBQTmxtKlZhZU9e0hhQUE5sbSpNwuL\nXUIoqN+jnA7rdwsr2t6isKCgnFja1DuFVbVVfKI7hQUF5cXSpvgsoZYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVs\naVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMUlpYFBWVsaVMLFda/2Sne\nLSGEzApbWFoWFJSxpU1RWFoWFJSxpU1RWFoWFJSxpU1RWFoWFJSxpU1RWFoWFJSxpU1RWFoW\nFJSxpU1RWFoWFJSxpU3ZFdb/PvBmUp9GexVC+aecDovCWifaqxDKP+V0WBTWOtFehVD+KafD\norDWifYqhPJPOR0WhbVOtFchlH/K6bAorHWivQqh/FNOh0VhrRPtVQjln3I6LAprnWivQij/\nlNNhUVjrRHsVQvmnnA6Lwlon2qsQyj/ldFgU1jrRXoVQ/imnw6Kw1on2KoTyTzkdFoW1TrRX\nIZR/yumwKKx1or0KofxTTodFYa0T7VUI5Z9yOiwKa51or0Io/5TTYVFY60R7FUL5p5wOi8Ja\nJ9qrEMo/5XRYSxbW5niZvxQKCwoqcUubelpYIYRsf565FAoLCipxS5t6Wlj3r13RWWH7dZux\nFAoLCipxS5t6eQzrfMiKztp8v51FYUFBObG0qdcH3W+HUG1m/XQpFBYUVOKWNvWqsK67avPq\nsg27Hy6FwoKCStzSpp4X1nnb7g2G7055oLCgoJxY2tTz0xpC2F0fk7IfLoXCgoJK3NKmnp/W\ncLjmPw6FBQXlxNKmnp/W8M5SKCwoqMQtberFiaP1bfbd7mC8FAoLCipxS5uaLqwsRJmxFAoL\nCipxS5uaLqxT1FenGUuhsKCgEre0qW93CWcthcKCgkrc0qbmfL1MVia6P14KhQUFlbilTU0X\nVrF5NXEMK2qorP+YwoKCcmJpUxSWlgUFZWxpUzN2CbPhfQoLCsqdpU3NKaz4EFb7478q/2an\nKKz5LyKE/Ok8L6xT0UeXkB27wmp/sIUFBcWvoAX1tLBOIeS38gTSY+9pCgsK6tcpp8NasrA2\n4VL8d7oOvqmBwoKC+nXK6bAWPnH0HDbxCaTsEkJB2VBOh7VkYWXhtg/X8ihW+0zedRSFBQX1\ne5TTYS1ZWMfyOl/lBtahferxr4RZdL+/FAoLCipxS5t6/q+Eh5Cdi2I65D8IhQUF5cTSprhU\nvZYFBWVsaVMUlpYFBWVsaVMvdgkzvsDv9y0oKGNLm3paWAe+cdTCgoIytrSpF6c1/OSrRgdL\nobCgoBK3tCm+cVTLgoIytrSpp4W1CzMu9EVhQUE5sbSpp4V1y7a32UuhsKCgEre0qRe7hBx0\nN7CgoIwtbYrC0rKgoIwtbYoTR7UsKChjS5uisLQsKChjS5t6UVinXbE7uL3OWQqFBQWVuKVN\nPS2s+6Y6fhXCZcZSKCwoqMQtbeppYe3DoTx59CtsZyyFwoKCStzSpl6e6f7478dLobCgoBK3\ntCkKS8uCgjK2tKnvdgkPYT9jKRQWFFTiljb1/KB783VY2U8+oENhQUE5sbSpF6c1HDchbA4/\n+gg0hQUF5cTSpjhxVMuCgjK2tCkKS8uCgjK2tKlnhXU/bkMIux9+6yiFBQXlxNKmnhTW+XEF\niuwnJ7pTWFBQXixtarqwbiHsyw8RXnbhR188SmFBQTmxtKnpwurOvtqHn1z6mcKCgnJiaVPT\nhZWFx9lXt7CZsRQKCwoqcUubmi6s6PM4fDRHfRVC+aecDovCWifaqxDKP+V0WBTWOtFehVD+\nKafDorDWifYqhPJPOR3WgoUVuGqOiQUFZWxpU4aF9Vlj8dsC9Xcop8Na8KM57y2FwoKCStzS\npigsLQsKytjSpigsLQsKytjSphYqrH+zUxbW/FcRQv5y2MLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLS\nsqCgjC1tak5hZUXi++0DCgsKyoulTc0orKz9Ed32l0JhQUElbmlTFJaWBQVlbGlTc49hZb2b\n4VIoLCioxC1t6t3Cag9h/Vfl3+yUhTX/VYSQv5yZhdXbI+SgOxSUO0uberOwBg8oLCgoJ5Y2\nNa+wsiePKCwoKCeWNjWrsLL+PQoLCsqdpU3NOnG0fzd6SGFBQTmxtKk552E9/mkwy/tnvVNY\nUFBuLG2KzxJqWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFp\nWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFp\nWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFpWVBQxpY2RWFp\nWVBQxpY2RWFpWVBQxpY2ZVlYHzUWvy1Qf4dyOiwKa51or0Io/5TTYVFY60R7FUL5p5wOi8Ja\nJ9qrEMo/5XRYFNY60V6FUP4pp8OisNaJ9iqE8k85HRaFtU60VyGUf8rpsCisdaK9CqH8U06H\nRWGtE+1VCOWfcjosCmudaK9CKP+U02FRWOtEexVC+aecDovCWifaqxDKP+V0WBTWOtFehVD+\nKafDorDWifYqhPJPOR0WhbVOtFchlH/K6bAorHWivQqh/FNOh0VhrRPtVQjln3I6LAprnWiv\nQij/lNNh2RXWv9mpCmv+ywghfzhsYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDG\nljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDG\nljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDG\nljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDGljZFYWlZUFDG\nljZFYWlZUFDGljZFYWlZUFDGljZlWlifNBa/LVB/h3I6LAprnWivQij/lNNhUVjrRHsVQvmn\nnA6Lwlon2qsQyj/ldFgU1jrRXoVQ/imnw6Kw1on2KoTyTzkdFoW1TrRXIZR/yumwKKx1or0K\nofxTTodFYa0T7VUI5Z9yOiwKa51or0Io/5TTYVFY60R7FUL5p5wOi8JaJ9qrEMo/5XRYyRXW\njxprei5+W6D+DuV0WBTWOtFehVD+KafD8lpYU7Px2wL1dyinw1q5sLIiU/fXLawns/HbAvV3\nKKfDWrewsvZH/36+fmFNzMdvC9TfoZwOy2Nh/Y/CgvrzlNNhOSys//3vSWPx2wL1dyinw7Io\nrP+q/Jud+W+VEOIr83vDbgvrw/C/N6i/QzkdVlK7hB+G3xaov0M5HRaFlbwFBWVsaVMUlpYF\nBWVsaVMUlpYFBWVsaVPvnOmeRff7S9EeawoWFJSxpU3ZfZbww/DbAvV3KKfDorCSt6CgjC1t\nisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1tisLSsqCgjC1t\nisLSsqCgjC1taqHCIoSQX8gihdUW1wLLEIzPYTGqhOJzWB+NisJ6Gp/DYlQJxeewKKx14nNY\njCqh+ByWeWERQsivhMIihCQTCosQkkwoLEJIMqGwCCHJhMIihCSTzwur/z3vbpI5HFc9Hm8D\n60blaFjtlRTcjurNYX1cWIMr6biJxyF168rR6JrffEcjyruV5GtldRezeX8ZFNaT+BtSlnss\nrCynsFIJhbVe/I0oz10WlsMBPeKusKpknw2IwpqOs0MidTwXlsP15bewPlhZFNZ0XA7Lc2G1\nP9yk3XdyNaxPR0VhvYi3Yfn8084m7nmI38Lq35kXCutFvA2LwkoorKzJUFjTcTksx38DPkfl\nblifj4rCms6H//iqGcd/2t7WVxbd+BlXNCqzg+7OzsVt43FYzf/fnI3M46iyxz+kuRrWEqPi\ns4SEkGRCYRFCkgmFRQhJJhQWISSZUFiEkGRCYRFCkgmFRQhJJhQWISSZUFiEkGRCYZElEh6x\nfiPEd/gFI0uEwiK/En7ByBKhqcivhN8zskSiwgrhmm3z/L4PYX8vn7huw66aoZ6p+tlODeG2\nC9mhnFDfuYdN+aC5IaQXCosskV5hbcM+z7NyB7EsnXt57zAorHZqCNXdQzNfUW2HcC6e/wpH\nk4EQ7VBYZIlEh7Cq9smP5c9DOJU/tvl92y+sbmpRb/f8FLLy4T6/FBOvxfx5vgsX0wERzVBY\nZIn0CutW/NzU5bQr7xWPr/3C6qbWc9fP3etl7cK1eMbP10CRBUNhkSXS2yWsfz4arKup+N6z\nqXlZbrv8XO5VEjIMhUWWyJKFVW6T1QeyCBmEwiJLZFRYm7h+8vzWVtKt2yXs5u7tEhabV4eM\nX0wyFX4vyBIZFdahPKz+VR4/P5aH1auD7ln4ag6/d1O7wiqfuz7arjrwTsgwFBZZIqPCqk9S\nKA+fV6cwNDVV5Fje66Z2hXVrT3UoNrGKaiNkHAqLLJFRYeW3fVFT1akJt13YVjuCebGnd2x2\nDB9To3OzrkWr7W/NMm6/+vZJKqGwyK9k1md3LpzmTqZDYZFfyazC2vJvhGQ6FBb5lcworMAh\nd/IsFBb5lcworKw8A56QqVBYhJBkQmERQpIJhUUISSYUFiEkmVBYhJBkQmERQpIJhUUISSYU\nFiEkmfwfbrAOiJBo/ogAAAAASUVORK5CYII=",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Visualize the RFM - Frequency\n",
"ggplot(data = rfm)+\n",
" geom_density(aes(x = Frequency),\n",
" fill = '#c22d6d',\n",
" col = 'white')+\n",
" labs(title = \"Distribution of Customer's Frequency\",\n",
" subtitle = 'Olist Customer Data')+\n",
" xlab('Frequency')+\n",
" ylab('Density')+\n",
" theme_bw()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "delayed-walker",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Min. 1st Qu. Median Mean 3rd Qu. Max. \n",
" 0.00 62.01 105.29 160.99 176.97 13664.08 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(rfm$Monetary)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "freelance-mambo",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Visualize the RFM - Monetary\n",
"ggplot(data = rfm)+\n",
" geom_density(aes(x = Monetary),\n",
" fill = '#c22d6d',\n",
" col = 'white')+\n",
" labs(title = \"Distribution of Customer's Monetary\",\n",
" subtitle = 'Olist Customer Data')+\n",
" xlab('Monetary')+\n",
" ylab('Density')+\n",
" theme_bw()"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "handed-saver",
"metadata": {},
"outputs": [],
"source": [
"rfm_level_agg = rfm %>%\n",
" group_by(`Customer Segment`) %>%\n",
" summarize(\n",
" Recency = mean(Recency),\n",
" Frequency = mean(Frequency),\n",
" `Monetary Mean` = mean(Monetary),\n",
" Total = n()\n",
") %>%\n",
" mutate(\n",
" `Total Percentage` = Total / sum(Total)\n",
") %>%\n",
" arrange(`Total Percentage`)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "changed-fifty",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>Customer Segment</th><th scope=col>Recency</th><th scope=col>Frequency</th><th scope=col>Monetary Mean</th><th scope=col>Total</th><th scope=col>Total Percentage</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>Potential Loyalist </td><td>588.8849 </td><td>8.818182 </td><td>2133.6218 </td><td> 11 </td><td>0.0001106184 </td></tr>\n",
"\t<tr><td>Customer Needing Attention</td><td>420.5195 </td><td>8.000000 </td><td>1770.0400 </td><td> 19 </td><td>0.0001910681 </td></tr>\n",
"\t<tr><td>At Risk </td><td>189.4049 </td><td>5.550000 </td><td>2504.2730 </td><td> 20 </td><td>0.0002011243 </td></tr>\n",
"\t<tr><td>Recent Customers </td><td>618.1459 </td><td>1.045296 </td><td> 162.6618 </td><td> 4305 </td><td>0.0432920023 </td></tr>\n",
"\t<tr><td>Promising </td><td>474.2921 </td><td>1.044056 </td><td> 159.7941 </td><td>22562 </td><td>0.2268883056 </td></tr>\n",
"\t<tr><td>Lost </td><td>123.4283 </td><td>1.029493 </td><td> 164.1009 </td><td>31296 </td><td>0.3147192808 </td></tr>\n",
"\t<tr><td>About to Sleep </td><td>284.5291 </td><td>1.034176 </td><td> 156.7006 </td><td>41228 </td><td>0.4145976006 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|llllll}\n",
" Customer Segment & Recency & Frequency & Monetary Mean & Total & Total Percentage\\\\\n",
"\\hline\n",
"\t Potential Loyalist & 588.8849 & 8.818182 & 2133.6218 & 11 & 0.0001106184 \\\\\n",
"\t Customer Needing Attention & 420.5195 & 8.000000 & 1770.0400 & 19 & 0.0001910681 \\\\\n",
"\t At Risk & 189.4049 & 5.550000 & 2504.2730 & 20 & 0.0002011243 \\\\\n",
"\t Recent Customers & 618.1459 & 1.045296 & 162.6618 & 4305 & 0.0432920023 \\\\\n",
"\t Promising & 474.2921 & 1.044056 & 159.7941 & 22562 & 0.2268883056 \\\\\n",
"\t Lost & 123.4283 & 1.029493 & 164.1009 & 31296 & 0.3147192808 \\\\\n",
"\t About to Sleep & 284.5291 & 1.034176 & 156.7006 & 41228 & 0.4145976006 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| Customer Segment | Recency | Frequency | Monetary Mean | Total | Total Percentage |\n",
"|---|---|---|---|---|---|\n",
"| Potential Loyalist | 588.8849 | 8.818182 | 2133.6218 | 11 | 0.0001106184 |\n",
"| Customer Needing Attention | 420.5195 | 8.000000 | 1770.0400 | 19 | 0.0001910681 |\n",
"| At Risk | 189.4049 | 5.550000 | 2504.2730 | 20 | 0.0002011243 |\n",
"| Recent Customers | 618.1459 | 1.045296 | 162.6618 | 4305 | 0.0432920023 |\n",
"| Promising | 474.2921 | 1.044056 | 159.7941 | 22562 | 0.2268883056 |\n",
"| Lost | 123.4283 | 1.029493 | 164.1009 | 31296 | 0.3147192808 |\n",
"| About to Sleep | 284.5291 | 1.034176 | 156.7006 | 41228 | 0.4145976006 |\n",
"\n"
],
"text/plain": [
" Customer Segment Recency Frequency Monetary Mean Total\n",
"1 Potential Loyalist 588.8849 8.818182 2133.6218 11\n",
"2 Customer Needing Attention 420.5195 8.000000 1770.0400 19\n",
"3 At Risk 189.4049 5.550000 2504.2730 20\n",
"4 Recent Customers 618.1459 1.045296 162.6618 4305\n",
"5 Promising 474.2921 1.044056 159.7941 22562\n",
"6 Lost 123.4283 1.029493 164.1009 31296\n",
"7 About to Sleep 284.5291 1.034176 156.7006 41228\n",
" Total Percentage\n",
"1 0.0001106184 \n",
"2 0.0001910681 \n",
"3 0.0002011243 \n",
"4 0.0432920023 \n",
"5 0.2268883056 \n",
"6 0.3147192808 \n",
"7 0.4145976006 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"rfm_level_agg"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "young-definition",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAHgCAMAAACCSWStAAABTVBMVEUbnndmph51cLN4xa6K\nzbmY08Kkynql2Mmmdh2tqtKw0Yuw3dC4tdi615q64ta+vr7BvtzC3KbE5tzIxuHKrnnK4LHN\n6eHPzeTRuIvR5LvV1OjV7ebXwZnX6MXY2NjZXwLb2uvcyabd683d8Orgz7Hg3+7j7tXk1rvk\n8+/l5PHmqwLnKYrooGno28To8d3q6fPrrX3r4c3r6+vr9vPtt43t9OTu5dXu7vbwgLnwwJvw\nzWnxyKjx6t3x9+vykcPy033y+ffzz7Pz2Y3z8vj0n8r07+T1qtH11b313Zv19fX2tdb228f2\n4qj2+vL3v9z35bP38+v39/r4x+D44dD46b34/Pv50OX559n57Mf61+n67OH679D69/L6/Pj7\n3+378en78tn7+/z85vH87PX89eH89vD89+n8+/j98/j9+vD9+vj9/f3++fv+/Pj////os7iN\nAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2964PVNBf2LYIoJzk7gMxzIwKC4qAv\njKMgcgZfRQQUD8A4DgooD/T///jsHpKulaycurvHCbmuDzC7bVbSpvl1ZTVN3qggCIIy0Rv/\ndQEgCIJiBWBBEJSNACwIgrIRgAVBUDYCsCAIykYAFgRB2QjAgiAoGwFYEARlox5YOyEIgtal\nJGC9CUGFaOcbr6l2fvJaCsCCihaAlZcALKhoAVh5CcCCihaAlZcALKhoAVh5CcCCihaAlZcA\nLKhoAVh5CcCCihaAlZcALKhoAVh5CcCCihaAlZcALKhoFQesL3U7X1PQjKDf638ALKhoFQes\nm6qZ/7OGrBlBN18+qf8DsKCiVRyw7qtm/sca0mZ6/VFV9+v/ASyoaBUHrCeqmd9fQ9xMq5sv\nJwW+Wf8FYEFFqzhgvVTN/PoaAmdK/dEU+Mv6TwALKlqlASvDmPvNl6TAABZUtEoDlo65/7WG\nyJlKqg/bxNwBLKhslQYsHXP/fQ2ZM43uqAL/0vwEsKCiVRqwdMz9zhpCZxr9ogr8XfMTwIKK\nVmnAyi7mrgn7TfMTwIKKVmHA+ka38rWEzjQyCgxgQUWrMGB9pxp5LjH3b4wCA1hQ0SoMWDoi\nlEvM/TujwAAWVLQKA1a+MfeuwAAWVLQKA5Zu5N+sIXSmkSZs95IAwIKKVlnAyi/m/tIoMIAF\n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\nrdd8imQyOYIke/dVRqxH8oH2r0fWZjbLcccmY6oGkjOL6f/Yp/uNfCwNYEHQaw4scXrkXsJu\n/QHgxLu56jjQ8YtvJmvvqG8JyQFGzvwjRjVx/Kvb7GtqAAsqXq85sKTpkYnE3VebxQSf/XbV\neaDjl2mtXZXw3z9/FNIZxxo/z//2rF2T0BpGBmBBRes1B1busoaRAVhQ0QKw1rWMkawAFlS4\nAKx1pppA+sdV9qsWgAUVLQBrnakmkIqenX9m9ggBLKhsAVjrTM+at4P1i8GrvzVDLPgqFgAW\nVLQArHUmc8SpMfkggAUVLQBrvekZ45U50wSABRUtAGvdiYyRf/WtuRPAgooWgLX+dP7Hv+uB\npP/+KYzRB7CgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCg\nogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypa\nAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg\n5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaAFZeArCgogVg5SUACypaO6G8\nBGBBJWvn/6CcBGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8\nBGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8BGBBRQvAyksA\nFlS0AKy8BGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8BGBBRQvAyksAFlS0AKy8JAIL\ngorRf90CoSSJwNoAQYUIwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACs\nvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpL\nABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARg\nQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZU\ntACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUULwMpLABZUtACsvARgQUUL\n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\nLzQjsBaPvlZTjBoCsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFY\nUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUV\nLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNEC\nsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQAr\nLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPIS\ngAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFY\nUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUV\nLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNEC\nsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQAr\nLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPIS\ngAUVLQArLwFYUNECsPISgAUVLQArLwFYUNECsPKSCCwIgqB1KQFYEARB61wAFgRB2QjAgiAo\nGwFYEARlIwALgqBsBGBBEJSNACwIgrIRgAVBUDYCsCAIykb/D8URLUFIMXsRAAAAAElFTkSu\nQmCC",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Visualize RFM Segment\n",
"ggplot(rfm_level_agg,\n",
" aes(area = Frequency,\n",
" fill = `Customer Segment`,\n",
" label = `Customer Segment`))+\n",
" geom_treemap(show.legend = FALSE)+\n",
" geom_treemap_text(fontface = 'italic',\n",
" colour = 'white',\n",
" place = 'centre',\n",
" grow = TRUE)+\n",
" scale_fill_brewer(palette = 'Dark2')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment