Clumpinessを計算するPythonパッケージclumpiを作りました

RFM分析の文脈で使われるClumpiness(C指標)を簡単に算出できるPythonパッケージ clumpi [klˈʌmpάɪ] を公開しました。非常にニッチですね。発音は決してクランピではないことに注意してください。

詳細はまた時間のある時に書き足すけど、とりあえずログデータからClumpinessを非常に簡単に計算できます。RFMの他の指標と違って、Clumpinessはイベント発生のregularityを検定するためにシミュレーションが必要になるので、算出がちょっと面倒くさいんですよね。ネットでClumpinessの情報を漁ると市場調査系の会社さんとかで解説が上がってるのを見かけて、しかしいざClumpinessを使ってみようと思うとシミュレーションの実装できないっていう場合も多いと思う。ということでかなり今さらながら作った。研究内容から考えたら5年遅い。

*ちょっとまた時間があるときにいろいろ書き足すつもりでいます。もしくは非常に簡単なシミュレーションして文章化して、パッケージと合わせて学内の紀要としてでも公開します。

インストール

PyPIに登録されているので、pip intallですぐに使えます。(ただGit Repo側の方が最新版である可能性はある)。

pip install clumpi

GitHubのリポジトリに上がっているものを入れる場合には以下のコマンドで直接インストールできます。

pip install git+https://github.com/jniimi/clumpi.git

使うときにはもちろんimportしてください。

import clumpi

使い方

とりあえず顧客を示すid変数とイベント発生時期を示す変数の入ったpandasのDataFrameを与えてあげてください。

サンプルが見たければ、

df = clumpi.load_sample_data()

で僕の作ったサンプルデータが吐き出されるので、それ眺めてみてください。各ユーザーについてtはユニークな前提なので、たとえば月次のRFMC分析をやりたいのに1日に複数の購買があったりするとうまく動きません(この辺りに不備がある場合にはエラーが出るようにしてあります)。日次のパネルデータとして集計しておいてください。

分析はdf自体の指定と、そのdfの中のユーザーIDとイベント発生時期を示す変数それぞれの名前をid, tの引数に与えてあげてください。Nには期間中の潜在的なイベント発生回数、月次の集計でいえば月間の日数を与えてあげればいいです。あとシミュレーションの細かい指定がしたければM, alphaを引数に指定してください。デフォルトはM=3000, alpha=0.05で3000回のシミュレーションで上側0.05%の値を境界値として取ってきて検定に使います。

clumpi.get_RFC(data=df, id='user_id', t='t', N=30)

これの動作が遅いのはもちろん内部でシミュレーションをしているからです。シミュレーションで境界値の算出だけしたければ、

clumpi.calc_threshold(N=30, M=3000, alpha=0.05)

とやってあげれば潜在的な利用回数N=30に対するn=1, n=2, …, n=30までの境界値が入ったDataFrameが返ってきます。

次は自動で図示してくれる関数も作りますかね。