Created
February 16, 2021 16:54
-
-
Save asterios-pantousas/8dc04fbd7c13771a8d48590a28e4448e to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<center>\n", | |
" <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/Logos/organization_logo/organization_logo.png\" width=\"300\" alt=\"cognitiveclass.ai logo\" />\n", | |
"</center>\n", | |
"\n", | |
"# K-Means Clustering\n", | |
"\n", | |
"Estimated time needed: **25** minutes\n", | |
"\n", | |
"## Objectives\n", | |
"\n", | |
"After completing this lab you will be able to:\n", | |
"\n", | |
"- Use scikit-learn's K-Means Clustering to cluster data\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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", | |
"\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", | |
"In this notebook we practice k-means clustering with 2 examples:\n", | |
"\n", | |
"- k-means on a random generated dataset\n", | |
"- Using k-means for customer segmentation\n" | |
] | |
}, | |
{ | |
"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>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### Import libraries\n", | |
"\n", | |
"Lets first import the required libraries.\n", | |
"Also run <b> %matplotlib inline </b> since we will be plotting in this section.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"button": false, | |
"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, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h1 id=\"random_generated_dataset\">k-Means on a randomly generated dataset</h1>\n", | |
"\n", | |
"Lets create our own dataset for this lab!\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"np.random.seed(0)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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", | |
"\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": 9, | |
"metadata": { | |
"button": false, | |
"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, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Display the scatter plot of the randomly generated data.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x7f25557cb6d8>" | |
] | |
}, | |
"execution_count": 10, | |
"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, | |
"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.\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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", | |
"\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>.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"button": false, | |
"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, | |
"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>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"button": 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": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"k_means.fit(X)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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> \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([3, 3, 0, ..., 3, 3, 3], dtype=int32)" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"k_means_labels = k_means.labels_\n", | |
"k_means_labels" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"We will also get the coordinates of the cluster centers using KMeans' <b> .cluster_centers_ </b> and save it as <b> k_means_cluster_centers </b>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[ 2.00389813, -3.05796248],\n", | |
" [ 0.99669006, 0.95498843],\n", | |
" [-2.01562005, -1.0044214 ],\n", | |
" [ 3.99990623, 3.95599216]])" | |
] | |
}, | |
"execution_count": 14, | |
"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, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h2 id=\"creating_visual_plot\">Creating the Visual Plot</h2>\n", | |
"\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!\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Please read through the code and comments to understand how to plot the model.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"button": 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", | |
"\n", | |
"Try to cluster the above dataset into 3 clusters. \n", | |
"Notice: do not generate data again, use the same dataset as above.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# write your code here\n", | |
"k_means3 = KMeans(init = \"k-means++\", n_clusters = 3, n_init = 12)\n", | |
"\n", | |
"k_means3.fit(X)\n", | |
"\n", | |
"k_means3_labels = k_means3.labels_\n", | |
"#k_means3_labels\n", | |
"\n", | |
"k_means3_cluster_centers = k_means3.cluster_centers_\n", | |
"#k_means3_cluster_centers\n", | |
"\n", | |
"# 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_means3_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_means3_labels == k)\n", | |
" \n", | |
" # Define the centroid, or cluster center.\n", | |
" cluster_center = k_means3_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": [ | |
"<details><summary>Click here for the solution</summary>\n", | |
"\n", | |
"```python\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", | |
"\n", | |
"</details>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h1 id=\"customer_segmentation_K_means\">Customer Segmentation with K-Means</h1>\n", | |
"\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)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--2021-02-16 16:33:38-- https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%204/data/Cust_Segmentation.csv\n", | |
"Resolving cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)... 169.63.118.104\n", | |
"Connecting to cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)|169.63.118.104|:443... connected.\n", | |
"HTTP request sent, awaiting response... 200 OK\n", | |
"Length: 33426 (33K) [text/csv]\n", | |
"Saving to: ‘Cust_Segmentation.csv’\n", | |
"\n", | |
"Cust_Segmentation.c 100%[===================>] 32.64K --.-KB/s in 0.003s \n", | |
"\n", | |
"2021-02-16 16:33:39 (11.1 MB/s) - ‘Cust_Segmentation.csv’ saved [33426/33426]\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"!wget -O Cust_Segmentation.csv https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%204/data/Cust_Segmentation.csv" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### Load Data From CSV File\n", | |
"\n", | |
"Before you can work with the data, you must use the URL to get the Cust_Segmentation.csv.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"button": 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": 18, | |
"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\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"button": 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": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df = cust_df.drop('Address', axis=1)\n", | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"#### Normalizing over the standard deviation\n", | |
"\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.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"button": 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": 20, | |
"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>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"button": 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, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h2 id=\"insights\">Insights</h2>\n", | |
"\n", | |
"We assign the labels to each row in dataframe.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"button": 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": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df[\"Clus_km\"] = labels\n", | |
"df.head(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"We can easily check the centroid values by averaging the features in each cluster.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"button": 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": 23, | |
"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:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"button": 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, | |
"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\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"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=\"https://www.ibm.com/analytics/spss-statistics-software\">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://www.ibm.com/cloud/watson-studio\">Watson Studio</a>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Thank you for completing this lab!\n", | |
"\n", | |
"## Author\n", | |
"\n", | |
"Saeed Aghabozorgi\n", | |
"\n", | |
"### Other Contributors\n", | |
"\n", | |
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a>\n", | |
"\n", | |
"## Change Log\n", | |
"\n", | |
"| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n", | |
"| ----------------- | ------- | ---------- | ---------------------------------- |\n", | |
"| 2020-11-03 | 2.1 | Lakshmi | Updated URL of csv |\n", | |
"| 2020-08-27 | 2.0 | Lavanya | Moved lab to course repo in GitLab |\n", | |
"| | | | |\n", | |
"| | | | |\n", | |
"\n", | |
"## <h3 align=\"center\"> © IBM Corporation 2020. All rights reserved. <h3/>\n" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python", | |
"language": "python", | |
"name": "conda-env-python-py" | |
}, | |
"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.12" | |
}, | |
"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