{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Clustering using `scikit-learn`" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "from sklearn import preprocessing, cluster, metrics\n", "from sklearn.pipeline import Pipeline\n", "\n", "from scipy.spatial.distance import cdist, pdist\n", "\n", "from fastdtw import fastdtw\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read in the cryptocurrencies dataset." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "crypto = pd.read_csv('https://raw.githubusercontent.com/estimand/teaching-datasets/master/cryptocurrencies/cryptocurrencies.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convert 'date' to `datetime`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "crypto['date'] = pd.to_datetime(crypto['date'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Keep only data from November 2017 onwards." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "crypto = crypto[crypto['date'] >= '2017-11-01']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pivot close prices." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "crypto_close = crypto.pivot_table(values='close', index='date', columns='symbol')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolBCHBTCBTGDASHEOSETCETHIOTLTCNEONXTXLMXMRXRPZEC
date
2017-11-01529.886737.78133.57269.641.0510.11289.420.364452.8326.870.055760.0273085.410.1903221.21
2017-11-02562.797024.81121.94263.221.1110.03284.920.366154.1924.620.060520.0275083.080.2003216.68
2017-11-03626.047152.12124.12276.791.2012.49304.510.392755.9826.670.057660.0274087.440.2059231.16
2017-11-04614.267363.80138.93273.451.1111.77300.040.368554.8326.440.056100.0270887.120.2015229.84
2017-11-05625.727389.55164.58272.221.0913.10296.230.350654.6026.240.057140.0266486.190.1997224.97
\n", "
" ], "text/plain": [ "symbol BCH BTC BTG DASH EOS ETC ETH IOT \\\n", "date \n", "2017-11-01 529.88 6737.78 133.57 269.64 1.05 10.11 289.42 0.3644 \n", "2017-11-02 562.79 7024.81 121.94 263.22 1.11 10.03 284.92 0.3661 \n", "2017-11-03 626.04 7152.12 124.12 276.79 1.20 12.49 304.51 0.3927 \n", "2017-11-04 614.26 7363.80 138.93 273.45 1.11 11.77 300.04 0.3685 \n", "2017-11-05 625.72 7389.55 164.58 272.22 1.09 13.10 296.23 0.3506 \n", "\n", "symbol LTC NEO NXT XLM XMR XRP ZEC \n", "date \n", "2017-11-01 52.83 26.87 0.05576 0.02730 85.41 0.1903 221.21 \n", "2017-11-02 54.19 24.62 0.06052 0.02750 83.08 0.2003 216.68 \n", "2017-11-03 55.98 26.67 0.05766 0.02740 87.44 0.2059 231.16 \n", "2017-11-04 54.83 26.44 0.05610 0.02708 87.12 0.2015 229.84 \n", "2017-11-05 54.60 26.24 0.05714 0.02664 86.19 0.1997 224.97 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crypto_close.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot (hierarchically clustered) heatmap of the correlation matrix." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.clustermap(crypto_close.corr())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## $k$-means" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a pipeline that scales the data and performs $k$-means clustering." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "kmeans = Pipeline([\n", " ('scale', preprocessing.StandardScaler()),\n", " ('kmeans', cluster.KMeans())\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set the number of clusters to 5." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pipeline(memory=None,\n", " steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('kmeans', KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n", " n_clusters=5, n_init=10, n_jobs=1, precompute_distances='auto',\n", " random_state=None, tol=0.0001, verbose=0))])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kmeans.set_params(\n", " kmeans__n_clusters=5\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fit the model and retrieve cluster assignments." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "labels = kmeans.fit_predict(crypto_close.transpose())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Elbow method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scale `X`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "scaler = preprocessing.StandardScaler()\n", "crypto_close_scaled = scaler.fit_transform(crypto_close.transpose())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fit models." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "kmeans_models = [cluster.KMeans(n_clusters=k).fit(crypto_close_scaled)\n", " for k in range(1, len(crypto_close_scaled) + 1)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute distance between each point and the closest centroid." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "centroids = [model.cluster_centers_ for model in kmeans_models]\n", "distances = [np.min(cdist(crypto_close_scaled, centroid), axis=1) for centroid in centroids]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute total sum of squares." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "total_ss = np.sum(pdist(crypto_close_scaled)**2) / len(crypto_close_scaled)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute within-cluster sum of squares." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "within_ss = [np.sum(d**2) for d in distances]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute between-cluster sum of squares (by difference)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "between_ss = total_ss - within_ss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot variance explained for different values of $k$." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(range(1, len(crypto_close_scaled) + 1), between_ss / total_ss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract labels from 'best' model ($k$ = 3)." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "labels = kmeans_models[2].labels_" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "colors = [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\"]\n", "for i in range(np.max(labels)):\n", " plt.plot(crypto_close.index, crypto_close_scaled[labels == i, :].transpose(), c=colors[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Custom distances" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define custom distance matrix using Dynamic Time Warping (DTW)." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "dtw_dist = np.zeros([len(crypto_close_scaled)] * 2)\n", "for i in range(len(crypto_close_scaled)):\n", " for j in range(i + 1, len(crypto_close_scaled)):\n", " dtw_dist[i, j] = dtw_dist[j, i] = fastdtw(crypto_close_scaled[i, :], crypto_close_scaled[j, :])[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform affinity propagation clustering." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "ap = cluster.AffinityPropagation(affinity='precomputed')\n", "labels = ap.fit_predict(-dtw_dist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot clustered time series from the 5 largest clusters." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "largest_clusters = pd.Series(labels).value_counts().index[0:5].get_values()\n", "for i, l in enumerate(largest_clusters):\n", " plt.plot(crypto_close.index, crypto_close_scaled[labels == l,:].transpose(), c=colors[i])" ] } ], "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }