Skip to content

Instantly share code, notes, and snippets.

@ershovio
Created August 23, 2016 20:23
Show Gist options
  • Save ershovio/34b958fbddd62773154ab33e06dfee9e to your computer and use it in GitHub Desktop.
Save ershovio/34b958fbddd62773154ab33e06dfee9e to your computer and use it in GitHub Desktop.
Ranking retail data using k-means clustering
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Importing libraries and reading the data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib\n",
"from matplotlib import pyplot as plt\n",
"from sklearn.cluster import KMeans\n",
"from sklearn.preprocessing import normalize\n",
"\n",
"data = pd.read_excel('Online Retail.xlsx')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Preparation the data for RFM analysis (Recency Frequency Monetary)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"grouped_by_price = data.groupby(['CustomerID', 'UnitPrice'], as_index=False).sum()\n",
"grouped_by_price['Sales'] = grouped_by_price['UnitPrice'] * grouped_by_price['Quantity']\n",
"\n",
"# total amount of money spent and quantity of purchases\n",
"customers = grouped_by_price.groupby('CustomerID', as_index=False).sum()\n",
"customers = customers.fillna(0)\n",
"\n",
"# the number of days since last purchase\n",
"recency = data[['CustomerID', 'InvoiceDate']].groupby('CustomerID').max()\n",
"recency.InvoiceDate = recency.InvoiceDate - recency.InvoiceDate.min()\n",
"recency.InvoiceDate = [pd.Timedelta(i).days for i in recency.InvoiceDate.values]\n",
"\n",
"train = pd.DataFrame()\n",
"train['ID'] = customers.CustomerID.values\n",
"train['Frequency'] = customers.Quantity.values\n",
"train['Monetary'] = customers.Sales.values\n",
"train['Recency'] = recency.InvoiceDate.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Deleting outliers, because K-Means is sensitive to it"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# computing min and max thresholds for deleting outliers\n",
"monetary_max_threshold = train.Monetary.quantile(0.98)\n",
"frequency_max_threshold = train.Frequency.quantile(0.98)\n",
"monetary_min_threshold = train.Monetary.quantile(0.02)\n",
"frequency_min_threshold = train.Frequency.quantile(0.02)\n",
"\n",
"train_without_outliers = train[(train['Monetary'] < monetary_max_threshold) & \\\n",
" (train['Frequency'] < frequency_max_threshold) & \\\n",
" (train['Monetary'] > monetary_min_threshold) & \\\n",
" (train['Frequency'] > frequency_min_threshold)]\n",
"train_without_outliers = train_without_outliers.set_index(train_without_outliers.ID)\n",
"del train_without_outliers['ID']"
]
},
{
"cell_type": "heading",
"metadata": {},
"level": 1,
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Clustering"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"cluster = KMeans(n_clusters=5, n_jobs=-1, max_iter=1000)\n",
"predictions = cluster.fit_predict(train_without_outliers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Visualization"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7efbcab2b1d0>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7efbd9b167b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"for type, color in zip(list(range(5)), ['co', 'ro', 'yo', 'go', 'bo']):\n",
" dots = train_without_outliers[['Monetary', 'Frequency']][predictions == type].values\n",
" dots_x = [i for i, j in dots]\n",
" dots_y = [j for i, j in dots]\n",
" plt.plot(dots_x, dots_y, color)\n",
"plt.xlabel('Monetary')\n",
"plt.ylabel('Frequency')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So cyan dots will get 5 score, blue - 4, yellow - 3, green - 2 and red - 1. Outliers that less than min threshold will get 1 score and outliers that more than max threshold will get 5 score. "
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"# map number of cluster from k-mean to rating\n",
"map_dict = {0 : 0, 1 : 1, 2 : 2, 3 : 3, 4 : 4, 5 : 5, 10 : 5, 11 : 1, 12 : 3, 13 : 2, 14 : 4}\n",
"train_without_outliers['CustomerID'] = train_without_outliers.index\n",
"train_without_outliers['Rank'] = predictions\n",
"train_without_outliers.Rank = train_without_outliers.Rank + 10\n",
"train_without_outliers.Rank = train_without_outliers.Rank.apply(lambda x: map_dict[x])\n",
"\n",
"# adding outliers' ratings\n",
"train['CustomerID'] = train.ID\n",
"train['Rank'] = -100\n",
"train.loc[(train.Frequency >= frequency_max_threshold) | (train.Monetary >= monetary_max_threshold), 'Rank'] = 5\n",
"train.loc[(train.Frequency <= frequency_min_threshold) | (train.Monetary <= monetary_min_threshold), 'Rank'] = 1\n",
"train_without_outliers.append(train[train.Rank == 1])\n",
"train_without_outliers.append(train[train.Rank == 5])\n",
"\n",
"with open('result.csv', 'w') as f:\n",
" f.write(train_without_outliers[['CustomerID', 'Rank']].to_csv(index=False))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2.0
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment