[セグメンテーションゾーン](flow_zone:default)は、クラスタリングを行う場所です。

![Segmentation Zone.png](LGZgA8l58fkb)

最初の[Joinレシピ](recipe:compute_customer_full_data)では、用意した4つのデータセットをまとめて、customer_idとreference_dateをキーとし、一つのデータセット[customer_full_data](dataset:customer_full_data)を作成します。nb_subscribed_productsが定義された時点に相当する、特定のreference_dateにおいてアクティブな顧客だけを残すために、事後（Post）フィルターが適用されます。商品の種類や、顧客データや付加情報データセットに含まれる追加カラムの数によって、このデータセットのサイズは変化する可能性があります。[Splitレシピ](recipe:split_customer_full_data)は、履歴データと参照データ、つまり参照日が[Dataikuアプリケーション](article:11)で定義されたproject_reference_dateと等しいデータを分離するために使用されます。

# クラスタリング

## 前処理

 [分析（Analysis）](analysis:MNRNuU9A)では、前処理として、収入、顧客行動、売上、残高の各変数の対数をスクリプトで処理します。これらの変数のほとんどは、低い値の周りに非常に高い密度を持ち、少数の非常に大きな値を持つ対数正規分布を示すので、このテクニックは外れ値を減らすために使用されます。これらの変数を変換しないと、すべての低い値を含む巨大なクラスタと、外れ値からなる別の非常に小さなクラスタという、非常に解釈しにくいクラスタになる可能性があります。クラスタリングは厳密な化学ではなく、特徴の前処理と分析への取り込み方は結果に大きく影響します。ビジネスノウハウがモデルにうまく反映されるように、細心の注意と配慮が必要です。

## 特徴量ハンドリング

すべての特徴量は、数値かカテゴリーであっても同様に扱われます。
 - カテゴリ変数はダミーにエンコードされる
 - 数値変数は，標準的なリスケールを用いてスケーリングされます、つまり各変数は，その平均で減算され，その標準偏差で割らます。このリスケーリングは，すべての変数について同等の距離を持つために必須です。標準リスケーリングは，観測値が平均から数標準偏差離れていることがあるので，いくつかの変数で外れ値を持つという特性を保持します。代わりに min-max リスケーリングを使用すると，2つのオブザベーション間の距離が1でキャップされるので，オブザベーション間の距離の変動がより少なくなります。
 
モデルに含まれる変数の集合についても選択できます。例えば、セグメンテーションは、主に収益に焦点を当て、人口統計を無視することによって行うことができます。同様に、行動データを使用し、収益を除外してセグメントを構築することも可能です。

## アルゴリズム定義

Kmeansアルゴリズムは、アルゴリズムメニューでパラメータ化されており、[Dataikuアプリケーション](article:11)で入力された値に応じて、プログラムで設定されるクラスタ数が設定されます。この数は、顧客の多様性に応じて調整することが可能です。外れ値検出画面では、どのセグメントにも属さない顧客がいると困るので、外れ値を検出しないことを選択しています。上記の前処理と特徴量処理の選択により、外れ値の数を設定する必要はありませんが、例えば、ユーザが非常に少ない観測値でクラスタを得た場合、外れ値を許容することは意味があるかもしれません。

# 分析

ビジュアルMLの結果ビュー内の画面も、[ダッシュボード](article:10) でエクスポートして直接消費できるようにしています。詳しくはリンク先の記事をご参照ください。

サマリービューでは、クラスターは主にそれらを定義する変数に基づいて自動的に名前が変更されています。しかし、ユーザーは、編集ボタンを使って、この情報をより人間にとって読みやすい名前で要約することができます。そして、[ここに](article:12)定義された[シナリオ](scenario:REBUILD_GRAPHS) を用いて、グラフを再構築します。


# デプロイ

このモデルは、デプロイボタンを使ってフロー上にデプロイされ、 [モデルが保存](saved_model:cw5jnbmG)されます。この保存されたモデルは、分割された2つのデータセットのスコアリングに使用されます。参照データをスコアリングすると、[customer_reference_data_scored](dataset:customer_reference_data_scored) データセットが生成され、セグメント名のフィールドが追加で含まれます。そして[customer_historical_data_scored](dataset:customer_historical_data_scored)データセットには、モデル学習で使われなかったデータの分析を広げるために、全ての履歴データのセグメントが含まれます。


