Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bnwiran/d1efded3b0d2ac96fd7edc6d8124be04 to your computer and use it in GitHub Desktop.
Save bnwiran/d1efded3b0d2ac96fd7edc6d8124be04 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<a href=\"https://www.bigdatauniversity.com\"><img src=\"https://ibm.box.com/shared/static/cw2c7r3o20w9zn8gkecaeyjhgw3xdgbj.png\" width=\"400\" align=\"center\"></a>\n",
"\n",
"<h1><center>K-Means Clustering</center></h1>"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"## Introduction\n",
"\n",
"There are many models for **clustering** out there. In this notebook, we will be presenting the model that is considered one of the simplest models amongst them. Despite its simplicity, the **K-means** is vastly used for clustering in many data science applications, especially useful if you need to quickly discover insights from **unlabeled data**. In this notebook, you will learn how to use k-Means for customer segmentation.\n",
"\n",
"Some real-world applications of k-means:\n",
"- Customer segmentation\n",
"- Understand what the visitors of a website are trying to accomplish\n",
"- Pattern recognition\n",
"- Machine learning\n",
"- Data compression\n",
"\n",
"\n",
"In this notebook we practice k-means clustering with 2 examples:\n",
"- k-means on a random generated dataset\n",
"- Using k-means for customer segmentation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Table of contents</h1>\n",
"\n",
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
" <ul>\n",
" <li><a href=\"#random_generated_dataset\">k-Means on a randomly generated dataset</a></li>\n",
" <ol>\n",
" <li><a href=\"#setting_up_K_means\">Setting up K-Means</a></li>\n",
" <li><a href=\"#creating_visual_plot\">Creating the Visual Plot</a></li>\n",
" </ol>\n",
" <li><a href=\"#customer_segmentation_K_means\">Customer Segmentation with K-Means</a></li>\n",
" <ol>\n",
" <li><a href=\"#pre_processing\">Pre-processing</a></li>\n",
" <li><a href=\"#modeling\">Modeling</a></li>\n",
" <li><a href=\"#insights\">Insights</a></li>\n",
" </ol>\n",
" </ul>\n",
"</div>\n",
"<br>\n",
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"### Import libraries\n",
"Lets first import the required libraries.\n",
"Also run <b> %matplotlib inline </b> since we will be plotting in this section."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"import random \n",
"import numpy as np \n",
"import matplotlib.pyplot as plt \n",
"from sklearn.cluster import KMeans \n",
"from sklearn.datasets.samples_generator import make_blobs \n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h1 id=\"random_generated_dataset\">k-Means on a randomly generated dataset</h1>\n",
"Lets create our own dataset for this lab!\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"First we need to set up a random seed. Use <b>numpy's random.seed()</b> function, where the seed will be set to <b>0</b>"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"np.random.seed(0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"Next we will be making <i> random clusters </i> of points by using the <b> make_blobs </b> class. The <b> make_blobs </b> class can take in many inputs, but we will be using these specific ones. <br> <br>\n",
"<b> <u> Input </u> </b>\n",
"<ul>\n",
" <li> <b>n_samples</b>: The total number of points equally divided among clusters. </li>\n",
" <ul> <li> Value will be: 5000 </li> </ul>\n",
" <li> <b>centers</b>: The number of centers to generate, or the fixed center locations. </li>\n",
" <ul> <li> Value will be: [[4, 4], [-2, -1], [2, -3],[1,1]] </li> </ul>\n",
" <li> <b>cluster_std</b>: The standard deviation of the clusters. </li>\n",
" <ul> <li> Value will be: 0.9 </li> </ul>\n",
"</ul>\n",
"<br>\n",
"<b> <u> Output </u> </b>\n",
"<ul>\n",
" <li> <b>X</b>: Array of shape [n_samples, n_features]. (Feature Matrix)</li>\n",
" <ul> <li> The generated samples. </li> </ul> \n",
" <li> <b>y</b>: Array of shape [n_samples]. (Response Vector)</li>\n",
" <ul> <li> The integer labels for cluster membership of each sample. </li> </ul>\n",
"</ul>\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"X, y = make_blobs(n_samples=5000, centers=[[4,4], [-2, -1], [2, -3], [1, 1]], cluster_std=0.9)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"Display the scatter plot of the randomly generated data."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f2593435d30>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[:, 0], X[:, 1], marker='.')"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"setting_up_K_means\">Setting up K-Means</h2>\n",
"Now that we have our random data, let's set up our K-Means Clustering."
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"The KMeans class has many parameters that can be used, but we will be using these three:\n",
"<ul>\n",
" <li> <b>init</b>: Initialization method of the centroids. </li>\n",
" <ul>\n",
" <li> Value will be: \"k-means++\" </li>\n",
" <li> k-means++: Selects initial cluster centers for k-mean clustering in a smart way to speed up convergence.</li>\n",
" </ul>\n",
" <li> <b>n_clusters</b>: The number of clusters to form as well as the number of centroids to generate. </li>\n",
" <ul> <li> Value will be: 4 (since we have 4 centers)</li> </ul>\n",
" <li> <b>n_init</b>: Number of time the k-means algorithm will be run with different centroid seeds. The final results will be the best output of n_init consecutive runs in terms of inertia. </li>\n",
" <ul> <li> Value will be: 12 </li> </ul>\n",
"</ul>\n",
"\n",
"Initialize KMeans with these parameters, where the output parameter is called <b>k_means</b>."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"k_means = KMeans(init = \"k-means++\", n_clusters = 4, n_init = 12)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"Now let's fit the KMeans model with the feature matrix we created above, <b> X </b>"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
" n_clusters=4, n_init=12, n_jobs=None, precompute_distances='auto',\n",
" random_state=None, tol=0.0001, verbose=0)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k_means.fit(X)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"Now let's grab the labels for each point in the model using KMeans' <b> .labels\\_ </b> attribute and save it as <b> k_means_labels </b> "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 3, 3, ..., 1, 0, 0], dtype=int32)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k_means_labels = k_means.labels_\n",
"k_means_labels"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"We will also get the coordinates of the cluster centers using KMeans' <b> .cluster&#95;centers&#95; </b> and save it as <b> k_means_cluster_centers </b>"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-2.03743147, -0.99782524],\n",
" [ 3.97334234, 3.98758687],\n",
" [ 0.96900523, 0.98370298],\n",
" [ 1.99741008, -3.01666822]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k_means_cluster_centers = k_means.cluster_centers_\n",
"k_means_cluster_centers"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"creating_visual_plot\">Creating the Visual Plot</h2>\n",
"So now that we have the random data generated and the KMeans model initialized, let's plot them and see what it looks like!"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"Please read through the code and comments to understand how to plot the model."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Initialize the plot with the specified dimensions.\n",
"fig = plt.figure(figsize=(6, 4))\n",
"\n",
"# Colors uses a color map, which will produce an array of colors based on\n",
"# the number of labels there are. We use set(k_means_labels) to get the\n",
"# unique labels.\n",
"colors = plt.cm.Spectral(np.linspace(0, 1, len(set(k_means_labels))))\n",
"\n",
"# Create a plot\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"\n",
"# For loop that plots the data points and centroids.\n",
"# k will range from 0-3, which will match the possible clusters that each\n",
"# data point is in.\n",
"for k, col in zip(range(len([[4,4], [-2, -1], [2, -3], [1, 1]])), colors):\n",
"\n",
" # Create a list of all data points, where the data poitns that are \n",
" # in the cluster (ex. cluster 0) are labeled as true, else they are\n",
" # labeled as false.\n",
" my_members = (k_means_labels == k)\n",
" \n",
" # Define the centroid, or cluster center.\n",
" cluster_center = k_means_cluster_centers[k]\n",
" \n",
" # Plots the datapoints with color col.\n",
" ax.plot(X[my_members, 0], X[my_members, 1], 'w', markerfacecolor=col, marker='.')\n",
" \n",
" # Plots the centroids with specified color, but with a darker outline\n",
" ax.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)\n",
"\n",
"# Title of the plot\n",
"ax.set_title('KMeans')\n",
"\n",
"# Remove x-axis ticks\n",
"ax.set_xticks(())\n",
"\n",
"# Remove y-axis ticks\n",
"ax.set_yticks(())\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Practice\n",
"Try to cluster the above dataset into 3 clusters. \n",
"Notice: do not generate data again, use the same dataset as above."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# write your code here\n",
"k_means2 = KMeans(init = \"k-means++\", n_clusters = 3, n_init = 12)\n",
"k_means2.fit(X)\n",
"fig = plt.figure(figsize=(6, 4))\n",
"colors = plt.cm.Spectral(np.linspace(0, 1, len(set(k_means2.labels_))))\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"for k, col in zip(range(len(k_means2.cluster_centers_)), colors):\n",
" my_members = (k_means2.labels_ == k)\n",
" cluster_center = k_means2.cluster_centers_[k]\n",
" ax.plot(X[my_members, 0], X[my_members, 1], 'w', markerfacecolor=col, marker='.')\n",
" ax.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click __here__ for the solution.\n",
"\n",
"<!-- Your answer is below:\n",
"\n",
"k_means3 = KMeans(init = \"k-means++\", n_clusters = 3, n_init = 12)\n",
"k_means3.fit(X)\n",
"fig = plt.figure(figsize=(6, 4))\n",
"colors = plt.cm.Spectral(np.linspace(0, 1, len(set(k_means3.labels_))))\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"for k, col in zip(range(len(k_means3.cluster_centers_)), colors):\n",
" my_members = (k_means3.labels_ == k)\n",
" cluster_center = k_means3.cluster_centers_[k]\n",
" ax.plot(X[my_members, 0], X[my_members, 1], 'w', markerfacecolor=col, marker='.')\n",
" ax.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)\n",
"plt.show()\n",
"\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h1 id=\"customer_segmentation_K_means\">Customer Segmentation with K-Means</h1>\n",
"Imagine that you have a customer dataset, and you need to apply customer segmentation on this historical data.\n",
"Customer segmentation is the practice of partitioning a customer base into groups of individuals that have similar characteristics. It is a significant strategy as a business can target these specific groups of customers and effectively allocate marketing resources. For example, one group might contain customers who are high-profit and low-risk, that is, more likely to purchase products, or subscribe for a service. A business task is to retaining those customers. Another group might include customers from non-profit organizations. And so on.\n",
"\n",
"Lets download the dataset. To download the data, we will use **`!wget`** to download it from IBM Object Storage. \n",
"__Did you know?__ When it comes to Machine Learning, you will likely be working with large datasets. As a business, where can you host your data? IBM is offering a unique opportunity for businesses, with 10 Tb of IBM Cloud Object Storage: [Sign up now for free](http://cocl.us/ML0101EN-IBM-Offer-CC)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2019-07-16 01:46:13-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/Cust_Segmentation.csv\n",
"Resolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.193\n",
"Connecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.193|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 34276 (33K) [text/csv]\n",
"Saving to: ‘Cust_Segmentation.csv’\n",
"\n",
"Cust_Segmentation.c 100%[===================>] 33.47K --.-KB/s in 0.02s \n",
"\n",
"2019-07-16 01:46:13 (1.56 MB/s) - ‘Cust_Segmentation.csv’ saved [34276/34276]\n",
"\n"
]
}
],
"source": [
"!wget -O Cust_Segmentation.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/Cust_Segmentation.csv"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"### Load Data From CSV File \n",
"Before you can work with the data, you must use the URL to get the Cust_Segmentation.csv."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Customer Id</th>\n",
" <th>Age</th>\n",
" <th>Edu</th>\n",
" <th>Years Employed</th>\n",
" <th>Income</th>\n",
" <th>Card Debt</th>\n",
" <th>Other Debt</th>\n",
" <th>Defaulted</th>\n",
" <th>Address</th>\n",
" <th>DebtIncomeRatio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>41</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>0.124</td>\n",
" <td>1.073</td>\n",
" <td>0.0</td>\n",
" <td>NBA001</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" <td>100</td>\n",
" <td>4.582</td>\n",
" <td>8.218</td>\n",
" <td>0.0</td>\n",
" <td>NBA021</td>\n",
" <td>12.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>33</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>57</td>\n",
" <td>6.111</td>\n",
" <td>5.802</td>\n",
" <td>1.0</td>\n",
" <td>NBA013</td>\n",
" <td>20.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>0.681</td>\n",
" <td>0.516</td>\n",
" <td>0.0</td>\n",
" <td>NBA009</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>31</td>\n",
" <td>253</td>\n",
" <td>9.308</td>\n",
" <td>8.908</td>\n",
" <td>0.0</td>\n",
" <td>NBA008</td>\n",
" <td>7.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Customer Id Age Edu Years Employed Income Card Debt Other Debt \\\n",
"0 1 41 2 6 19 0.124 1.073 \n",
"1 2 47 1 26 100 4.582 8.218 \n",
"2 3 33 2 10 57 6.111 5.802 \n",
"3 4 29 2 4 19 0.681 0.516 \n",
"4 5 47 1 31 253 9.308 8.908 \n",
"\n",
" Defaulted Address DebtIncomeRatio \n",
"0 0.0 NBA001 6.3 \n",
"1 0.0 NBA021 12.8 \n",
"2 1.0 NBA013 20.9 \n",
"3 0.0 NBA009 6.3 \n",
"4 0.0 NBA008 7.2 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"cust_df = pd.read_csv(\"Cust_Segmentation.csv\")\n",
"cust_df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2 id=\"pre_processing\">Pre-processing</h2"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"As you can see, __Address__ in this dataset is a categorical variable. k-means algorithm isn't directly applicable to categorical variables because Euclidean distance function isn't really meaningful for discrete variables. So, lets drop this feature and run clustering."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Customer Id</th>\n",
" <th>Age</th>\n",
" <th>Edu</th>\n",
" <th>Years Employed</th>\n",
" <th>Income</th>\n",
" <th>Card Debt</th>\n",
" <th>Other Debt</th>\n",
" <th>Defaulted</th>\n",
" <th>DebtIncomeRatio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>41</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>0.124</td>\n",
" <td>1.073</td>\n",
" <td>0.0</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" <td>100</td>\n",
" <td>4.582</td>\n",
" <td>8.218</td>\n",
" <td>0.0</td>\n",
" <td>12.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>33</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>57</td>\n",
" <td>6.111</td>\n",
" <td>5.802</td>\n",
" <td>1.0</td>\n",
" <td>20.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>0.681</td>\n",
" <td>0.516</td>\n",
" <td>0.0</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>31</td>\n",
" <td>253</td>\n",
" <td>9.308</td>\n",
" <td>8.908</td>\n",
" <td>0.0</td>\n",
" <td>7.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Customer Id Age Edu Years Employed Income Card Debt Other Debt \\\n",
"0 1 41 2 6 19 0.124 1.073 \n",
"1 2 47 1 26 100 4.582 8.218 \n",
"2 3 33 2 10 57 6.111 5.802 \n",
"3 4 29 2 4 19 0.681 0.516 \n",
"4 5 47 1 31 253 9.308 8.908 \n",
"\n",
" Defaulted DebtIncomeRatio \n",
"0 0.0 6.3 \n",
"1 0.0 12.8 \n",
"2 1.0 20.9 \n",
"3 0.0 6.3 \n",
"4 0.0 7.2 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = cust_df.drop('Address', axis=1)\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"#### Normalizing over the standard deviation\n",
"Now let's normalize the dataset. But why do we need normalization in the first place? Normalization is a statistical method that helps mathematical-based algorithms to interpret features with different magnitudes and distributions equally. We use __StandardScaler()__ to normalize our dataset."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.74291541, 0.31212243, -0.37878978, ..., -0.59048916,\n",
" -0.52379654, -0.57652509],\n",
" [ 1.48949049, -0.76634938, 2.5737211 , ..., 1.51296181,\n",
" -0.52379654, 0.39138677],\n",
" [-0.25251804, 0.31212243, 0.2117124 , ..., 0.80170393,\n",
" 1.90913822, 1.59755385],\n",
" ...,\n",
" [-1.24795149, 2.46906604, -1.26454304, ..., 0.03863257,\n",
" 1.90913822, 3.45892281],\n",
" [-0.37694723, -0.76634938, 0.50696349, ..., -0.70147601,\n",
" -0.52379654, -1.08281745],\n",
" [ 2.1116364 , -0.76634938, 1.09746566, ..., 0.16463355,\n",
" -0.52379654, -0.2340332 ]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"X = df.values[:,1:]\n",
"X = np.nan_to_num(X)\n",
"Clus_dataSet = StandardScaler().fit_transform(X)\n",
"Clus_dataSet"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2 id=\"modeling\">Modeling</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"In our example (if we didn't have access to the k-means algorithm), it would be the same as guessing that each customer group would have certain age, income, education, etc, with multiple tests and experiments. However, using the K-means clustering we can do all this process much easier.\n",
"\n",
"Lets apply k-means on our dataset, and take look at cluster labels."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0 1 1 2 0 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1 1\n",
" 1 1 0 1 0 1 2 1 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1\n",
" 1 1 1 1 0 1 0 0 2 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1\n",
" 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1\n",
" 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 1\n",
" 1 1 1 1 0 1 1 0 1 0 1 1 0 2 1 0 1 1 1 1 1 1 2 0 1 1 1 1 0 1 1 0 0 1 0 1 0\n",
" 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 2 0 1 1 1 1 1 1 1 0 1 1 1 1\n",
" 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 0 0 1 1 1 1 1 1\n",
" 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 0 1\n",
" 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 2 1 1 1 0 1 0 0 0 1\n",
" 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1\n",
" 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 2\n",
" 1 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 2 1 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 1 1 1\n",
" 1 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1\n",
" 1 0 0 1 1 1 1 1 1 1 1 1 1 1 2 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 2 1 2 1\n",
" 1 2 1 1 1 1 1 1 1 1 1 0 1 0 1 1 2 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 0\n",
" 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0\n",
" 0 1 1 0 1 0 1 1 0 1 0 1 1 2 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 1 1\n",
" 0 1 1 1 0 1 2 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1\n",
" 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1\n",
" 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 0\n",
" 1 1 1 1 1 1 1 0 1 1 1 1 1 1 2 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1\n",
" 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0]\n"
]
}
],
"source": [
"clusterNum = 3\n",
"k_means = KMeans(init = \"k-means++\", n_clusters = clusterNum, n_init = 12)\n",
"k_means.fit(X)\n",
"labels = k_means.labels_\n",
"print(labels)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"insights\">Insights</h2>\n",
"We assign the labels to each row in dataframe."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Customer Id</th>\n",
" <th>Age</th>\n",
" <th>Edu</th>\n",
" <th>Years Employed</th>\n",
" <th>Income</th>\n",
" <th>Card Debt</th>\n",
" <th>Other Debt</th>\n",
" <th>Defaulted</th>\n",
" <th>DebtIncomeRatio</th>\n",
" <th>Clus_km</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>41</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>19</td>\n",
" <td>0.124</td>\n",
" <td>1.073</td>\n",
" <td>0.0</td>\n",
" <td>6.3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" <td>100</td>\n",
" <td>4.582</td>\n",
" <td>8.218</td>\n",
" <td>0.0</td>\n",
" <td>12.8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>33</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>57</td>\n",
" <td>6.111</td>\n",
" <td>5.802</td>\n",
" <td>1.0</td>\n",
" <td>20.9</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>29</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>0.681</td>\n",
" <td>0.516</td>\n",
" <td>0.0</td>\n",
" <td>6.3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" <td>31</td>\n",
" <td>253</td>\n",
" <td>9.308</td>\n",
" <td>8.908</td>\n",
" <td>0.0</td>\n",
" <td>7.2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Customer Id Age Edu Years Employed Income Card Debt Other Debt \\\n",
"0 1 41 2 6 19 0.124 1.073 \n",
"1 2 47 1 26 100 4.582 8.218 \n",
"2 3 33 2 10 57 6.111 5.802 \n",
"3 4 29 2 4 19 0.681 0.516 \n",
"4 5 47 1 31 253 9.308 8.908 \n",
"\n",
" Defaulted DebtIncomeRatio Clus_km \n",
"0 0.0 6.3 1 \n",
"1 0.0 12.8 0 \n",
"2 1.0 20.9 1 \n",
"3 0.0 6.3 1 \n",
"4 0.0 7.2 2 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Clus_km\"] = labels\n",
"df.head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"We can easily check the centroid values by averaging the features in each cluster."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Customer Id</th>\n",
" <th>Age</th>\n",
" <th>Edu</th>\n",
" <th>Years Employed</th>\n",
" <th>Income</th>\n",
" <th>Card Debt</th>\n",
" <th>Other Debt</th>\n",
" <th>Defaulted</th>\n",
" <th>DebtIncomeRatio</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Clus_km</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>402.295082</td>\n",
" <td>41.333333</td>\n",
" <td>1.956284</td>\n",
" <td>15.256831</td>\n",
" <td>83.928962</td>\n",
" <td>3.103639</td>\n",
" <td>5.765279</td>\n",
" <td>0.171233</td>\n",
" <td>10.724590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>432.468413</td>\n",
" <td>32.964561</td>\n",
" <td>1.614792</td>\n",
" <td>6.374422</td>\n",
" <td>31.164869</td>\n",
" <td>1.032541</td>\n",
" <td>2.104133</td>\n",
" <td>0.285185</td>\n",
" <td>10.094761</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>410.166667</td>\n",
" <td>45.388889</td>\n",
" <td>2.666667</td>\n",
" <td>19.555556</td>\n",
" <td>227.166667</td>\n",
" <td>5.678444</td>\n",
" <td>10.907167</td>\n",
" <td>0.285714</td>\n",
" <td>7.322222</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Customer Id Age Edu Years Employed Income \\\n",
"Clus_km \n",
"0 402.295082 41.333333 1.956284 15.256831 83.928962 \n",
"1 432.468413 32.964561 1.614792 6.374422 31.164869 \n",
"2 410.166667 45.388889 2.666667 19.555556 227.166667 \n",
"\n",
" Card Debt Other Debt Defaulted DebtIncomeRatio \n",
"Clus_km \n",
"0 3.103639 5.765279 0.171233 10.724590 \n",
"1 1.032541 2.104133 0.285185 10.094761 \n",
"2 5.678444 10.907167 0.285714 7.322222 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('Clus_km').mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, lets look at the distribution of customers based on their age and income:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"button": false,
"collapsed": false,
"deletable": true,
"jupyter": {
"outputs_hidden": false
},
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"area = np.pi * ( X[:, 1])**2 \n",
"plt.scatter(X[:, 0], X[:, 3], s=area, c=labels.astype(np.float), alpha=0.5)\n",
"plt.xlabel('Age', fontsize=18)\n",
"plt.ylabel('Income', fontsize=16)\n",
"\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from mpl_toolkits.mplot3d import Axes3D \n",
"fig = plt.figure(1, figsize=(8, 6))\n",
"plt.clf()\n",
"ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)\n",
"\n",
"plt.cla()\n",
"# plt.ylabel('Age', fontsize=18)\n",
"# plt.xlabel('Income', fontsize=16)\n",
"# plt.zlabel('Education', fontsize=16)\n",
"ax.set_xlabel('Education')\n",
"ax.set_ylabel('Age')\n",
"ax.set_zlabel('Income')\n",
"\n",
"ax.scatter(X[:, 1], X[:, 0], X[:, 3], c= labels.astype(np.float))\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"k-means will partition your customers into mutually exclusive groups, for example, into 3 clusters. The customers in each cluster are similar to each other demographically.\n",
"Now we can create a profile for each group, considering the common characteristics of each cluster. \n",
"For example, the 3 clusters can be:\n",
"\n",
"- AFFLUENT, EDUCATED AND OLD AGED\n",
"- MIDDLE AGED AND MIDDLE INCOME\n",
"- YOUNG AND LOW INCOME"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2>Want to learn more?</h2>\n",
"\n",
"IBM SPSS Modeler is a comprehensive analytics platform that has many machine learning algorithms. It has been designed to bring predictive intelligence to decisions made by individuals, by groups, by systems – by your enterprise as a whole. A free trial is available through this course, available here: <a href=\"http://cocl.us/ML0101EN-SPSSModeler\">SPSS Modeler</a>\n",
"\n",
"Also, you can use Watson Studio to run these notebooks faster with bigger datasets. Watson Studio is IBM's leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, Watson Studio enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of Watson Studio users today with a free account at <a href=\"https://cocl.us/ML0101EN_DSX\">Watson Studio</a>\n",
"\n",
"<h3>Thanks for completing this lesson!</h3>\n",
"\n",
"<h4>Author: <a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a></h4>\n",
"<p><a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a>, PhD is a Data Scientist in IBM with a track record of developing enterprise level applications that substantially increases clients’ ability to turn data into actionable knowledge. He is a researcher in data mining field and expert in developing advanced analytic methods like machine learning and statistical modelling on large datasets.</p>\n",
"\n",
"<hr>\n",
"\n",
"<p>Copyright &copy; 2018 <a href=\"https://cocl.us/DX0108EN_CC\">Cognitive Class</a>. This notebook and its source code are released under the terms of the <a href=\"https://bigdatauniversity.com/mit-license/\">MIT License</a>.</p>"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment