PythonでHML分析

HML分析とは?

代表的な例としては、アクセスログ解析をする際に、
ヘビーユーザー・ミドルユーザー・ライトユーザーの3つのグループに分けることがある。
それぞれの頭文字をとってH(ヘビー)M(ミドル)L(ライト)分析と言う。

例えば、ユーザーのPV数で分けたり、課金額、CV数などを使って3分割することが多い。
ウェブサイト系に限った話ではなく、多種多様な業界に用いることができる分析手法である。


それではPythonでHML分析を実行する際の手順を説明していく。

手順①:HMLに分類するデータの準備

今回は、対象データが無いのでランダムに数値を生成し、 それをHML分析の際の元データとする。

import numpy as np

# 0~100の間の整数を100個生成する
nums = np.random.randint(0, 100, 100)

念のため、このnumsにはどのような値が入っているのかというと、

array([93, 80, 25,  4, 62, 23, 40,  4, 27,  0, 30, 34, 62, 81, 65, 19, 37,
       43, 23,  1, 50, 72, 34, 59, 89, 74,  4,  2, 69, 20,  5, 72, 98, 49,
       63, 20, 72, 23, 82, 22, 29,  4, 45, 28, 56, 41, 42, 19, 97, 99, 24,
       96, 45, 30, 95, 30, 42, 91,  4, 46, 92, 33, 35, 13, 58,  9, 20, 44,
       98, 48, 26, 54, 62, 10, 14, 11, 60, 36, 70, 11, 78, 83,  3, 85, 90,
       57, 51,  1,  1, 29, 13, 63, 74, 52, 83, 47, 61, 85, 32,  5])

こんなデータが入っております。

手順②:データの前処理

HMLの3つに分割する際には、Kmeansという機械学習手法を利用する。
現在のデータの形のまま計算させようとしてもできないので、計算できるように前処理をしよう。

  • モデルに投入するデータイメージ
[[1],[2],[3]]

このような形に変換したいので、以下のコードを実行します。

import pandas as pd

df = pd.Series(sorted(nums)).reset_index()
df.columns = ['index', 'num']
modeling_data = df[['num']]

手順③:KMeansを使って3つに分割

HMLの3つに分割したいデータの前処理が完了しました。
それでは実際にモデルに投入してみましょう。

from sklearn.cluster import KMeans

km = KMeans(n_clusters=3)
km.fit(modeling_data)
df.loc[:, 'cluster'] = km.labels_

cluster列に分割した結果が格納されました。
データフレームの一部を出力してみましょう。

index num cluster
0 1 0
1 2 0
2 2 0
3 5 0
4 7 0

手順④:グラフに出力する

f:id:gotto50105010:20180505141503p:plain

clusterの値ごとに色を変えて出力してみました。
numの値でハイ・ミドル・ロウの3つに別れましたね。

このグラフを描画するスクリプトは以下の通りです。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
colors = cm.Accent.colors
for i in range(3):
    target = df[df['cluster'] == i]
    ax.scatter(x=target['index'], y=target['num'], c=colors[i])

ax.set_title('HML Graph')
ax.set_xlabel('index')
ax.set_ylabel('num')
plt.savefig('hml_graph.png')
plt.show()

仕事で機械学習を使うなら

今回取り上げたHML分析以外にも仕事で機械学習を用いる方には、
こちらの本がオススメになります。

仕事ではじめる機械学習

仕事ではじめる機械学習

1冊手元にあって損は無い本だと思うので、
ぜひ読んでみると良いと思います。

今回参考させていただいたサイトはこちらです いつものHML分析 - ひよこ、通勤中。