機械学習

Azure ML Studioで顧客データ分析の実験(CRM analysis)

前回の記事は「Azure ML Studioでの機械学習の設定」を解説しました。 今回の記事はAzure ML Studioで顧客データ分析の実験を紹介します。 今回のデータセットはThe KDD Cup 2009 のデータです。 230特徴量の顧客属性とアップセル、新製品販売、解約の顧客行動履歴のフランスの通信会社Orangeデータです。50,000件のデータから3つの分類分析モデルを作成します。   解決課題 1)アップセルデータでアップセルしやすい人を見つけます。 2)新製品販売のデータで新製品を買う可能性高い人を見つけます。 3)解約データで解約したい人を見つけます   全体のExperimentの図は下記になります。特徴量の顧客属性と3つの過去行動のターゲットを結合して、モデルを作成します。   Var1からVar230は特徴量の5万件のデータセットです。 特徴データは欠損値がありますので、欠損値を0に置き換えます。   「Add Columns」 のモジュールで特徴量のと各ターゲットを結合します。 次に、vol1の層別化でテストとトレーニングを半分に分割します。   次に、予測モデルを構築するために、既定のパラメーターを持つ2クラスブーストデシジョンツリーバイナリ分類器を使用します。 ブースト デシジョン ツリーとは第2の木が第1の木の誤差を補正し、第3の木が第1および第2の木の誤差を補正するというように、集団学習法である。 ツリー全体の集合に基づいて予測あします。   Evaluate Model:アップセルタ テストセットに対するモデルのパフォーマンスは、Evaluate Modelモジュールの出力を視覚化することで確認できます。 「アップセルタ」では、ROC曲線は、モデルがランダムモデルよりも優れていること、および曲線下面積(AUC)が0.857であることを示しています。 しきい値が0.5の場合、精度は0.663、再現率は0.463、F1スコアは0.545です。   Evaluate Model:新製品販売 「新製品販売」のROC曲線では、AUCが0.727であることを示しています。   Evaluate Model:解約 「解約」のROC曲線では、AUCが0.711であります。     モデルの確認 [Train Model]のモジュールの Visualization 決定木図が表します。 モデルの判断を確認することができます。 決定木は、葉が分類を表し、枝がその分類に至るまでの特徴の集まりを表すような木構造を示します。データの持つ素性の中で集められたデータを一番よく分割する素性と閾値の組を選びます.その素性と閾値で分割後、またそれぞれのノードで分割を繰り返し行っていきます。分割が実行不可能となった場合、または、部分集合の個々の要素が各々1つずつの分類となってしまう段階で終了します。 …

Azure ML Studioで顧客データ分析の実験(CRM analysis) Read More »

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例

(2019年7月27日の更新) 前回の記事は「モデル評価」を話しました。 今回の記事はグリッドサーチでのハイパーパラメータ最適化を解説します。 1)グリッドサーチ とは グリッドサーチとは、モデルの精度を向上させるために用いられる手法です。全てのパラメータの組み合わせを試してみる方法のことです。機械学習モデルのハイパーパラメータを自動的に最適化してくれるというありがたい機能。例えば、SVMならCや、kernelやgammaとか 2)GridSearchCV関数の説明 Pythonの機械学習ライブラリscikit-learnにはモデルのハイパーパラメータを調整する方法としてGridSearchCVが用意されています。 class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False) パラメータ名 説明 estimator : estimator object チューニングを行うモデル param_grid : dict or list of dictionaries パラメタ候補値を「パラメタ名, 候補値リスト」の辞書で与える scoring : string, callable, list/tuple, dict or None, default: None 複数のメトリックを評価するには、文字例のリストか、の辞書で与える n_jobs : int or None, optional (default=None) 同時実行数(-1にするとコア数で同時実行) pre_dispatch …

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例 Read More »

グラフィカルラッソ(Graphical Lasso)変数関係の可視化

今回の記事はグラフィカルラッソで変数関係の可視化を説明します。 グラフィカルラッソとは グラフィカルラッソはガウシアングラフィカルモデルに従う、確率変数ベクトルがあった時、変数間の関係を指定し、グラフ化する手法です。回帰問題を以前取扱いましたが、回帰の分析が中で行われています sklearnからBostonデータセットの各変数間の関係をグラフ化します。 下記はボストンの物件の価格にその物件の人口統計に関する情報です。 sklearnからBostonデータセットの各変数間の関係をグラフ化します。 下記はボストンの物件の価格にその物件の人口統計に関する情報です。 CRIM 人口 1 人当たりの犯罪発生数 (人口単位) ZN 25,000 平方フィート以上の住居区画の占める割合 INDUS 非小売業の土地面積の割合 (人口単位) CHAS チャールズ川沿いかどうか(1:Yes、0:No) NOX 窒素酸化物の濃度(pphm単位) RM 住居の平均部屋数 AGE 1940 年より前に建てられた物件の割合 DIS 5 つのボストン市の雇用施設からの距離 (重み付け済) RAD 環状高速道路へのアクセスしやすさ TAX $10,000 ドルあたりの不動産税率の総計 PTRATIO 町毎の児童と教師の比率 (人口単位) B アフリカ系アメリカ人居住者の割合(人口単位) LSTAT 給与の低い職業に従事する人口の割合 (%)   import pydot import numpy as np import pandas as pd import seaborn as …

グラフィカルラッソ(Graphical Lasso)変数関係の可視化 Read More »

スペクトラルクラスタリングのパラメータ解説

  以前の記事はスペクトラルクラスタリングについて説明しました。スペクトラルクラスタリングとは、クラスタリングの機械学習の方法のうち、教師なし学習に分類されます。スペクトラルクラスタリングの詳細はこちらです。   今回の記事はスペクトラルクラスタリングのパラメータ設定を説明します。 Scikit-learnのライブラリのパラメータを説明していきます。   class sklearn.cluster.SpectralClustering(n_clusters=8, eigen_solver=None, random_state=None, n_init=10, gamma=1.0, affinity=’rbf’, n_neighbors=10, eigen_tol=0.0, assign_labels=’kmeans’, degree=3, coef0=1, kernel_params=None, n_jobs=None)   先ず、スペクトラルクラスタリングの例を作成します。   from sklearn import datasets   # データ作成 X,z = datasets.make_blobs(n_samples=5000,                           n_features=2,                           centers=15,                           cluster_std=1.2,                           center_box=(-10.0, 10.0),                           shuffle=True,                           random_state=111                           )   # データの整形 sc=preprocessing.StandardScaler() sc.fit(X) X_norm=sc.transform(X)   …

スペクトラルクラスタリングのパラメータ解説 Read More »

決定木分析のパラメータ解説

前回の記事は決定木の特徴とアルゴリズムを説明しました。今回の記事は決定木のパラメータ設定を説明します。決定木の紹介はこちらです。 Scikit-learnのライブラリのパラメータを説明していきます。 class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)[source]   from sklearn.datasets import load_iris from sklearn import tree   clf = tree.DecisionTreeClassifier(criterion=’gini’,                                   splitter=’best’,                                   max_depth=4,                                   min_samples_split=3,                                   min_samples_leaf=1,                                   min_weight_fraction_leaf=0.0,                                   max_features=4,                                   random_state=None,                                   max_leaf_nodes=8,                                   min_impurity_split=1e-07,                                   class_weight=’balanced’,                                   presort=False)   iris = load_iris() …

決定木分析のパラメータ解説 Read More »

Pythonトップライブラリ2018

Pythonは、学習初期でも先人の作ったライブラリを利用することで、高速に開発が可能になります。 Pythonライブラリを管理する PyPi.org では、現在 100万以上のライブラリが公開され、現在も増加中です。 前回の記事は2018年の大人気のライブラリを紹介します。   年末でKdnuggetsがGithubの「星」と投稿者の人数とコメント数からトップ15のライブラリを発表しました。下記の図はGithubの「星」と投稿者の人数で表します。ては、ライブラリを軽いに紹介します。 1 – TensorFlow (投稿者 – 1757, コメント数 – 25756, 星 – 116765) Googleの機械学習/ディープラーニング/ネットワークライブラリです。柔軟なアーキテクチャにより、1つのAPIを使用してデスクトップ、サーバー、またはモバイルデバイスの1つ以上のCPUまたはGPUに計算を展開できます。またコードはやや書きにくいのが特徴になります。PyTorchおよびChainerの利点はDefine by Run(動的計算グラフ)と呼ばれる特徴です。Define by Runは入力データのサイズや次元数に合わせてニューラルネットワークの形や計算方法を変更することができます。       2 – pandas (投稿者  – 1360, コメント数 – 18441, 星 – 17388) 機械学習やディープラーニングの前処理のために、データの集計をするライブラリになります。数値や時系列のデータの操作や、データ構造をいじったりすることができます。また最近では、可視化も可能になってきています。     3 – scikit-learn (投稿者 – 1218, コメント数 – 23509, 星 – 32326) NumPy, SciPy や Matplotlib と互換性を持つように開発されてクラスタリングや回帰、分類器、次元圧縮、データの前処理をはじめとする、機械学習のアルゴリズムを幅広く実装しているライブラリです。   …

Pythonトップライブラリ2018 Read More »

決定木分析

前回の記事は複数の決定木を作成するランダムフォレストを説明しました。決定木のモデルを分からない人があるかもしれません。今回の記事は決定木を説明します。   決定木とは 決定木((Decision Tree:デシジョン ツリー)は予測や分類を目的として使われる教師あり機械学です。段階的にデータを分割していき、木のような分析結果を出力する」ものです。モデルをツリーで表現できるので、どの説明変数が目的変数にどのように効いているのかが視覚的な手法です。目標は、1つのグループ内のすべての要素が同じカテゴリに属するようにデータをグループに分割することです。   決定木分析の長所 説明変数と目的変数にどのように効いているのかが視覚的に分かりやすいというメリットがあります。 数値データとカテゴリデータも対応できるモデルです。 正規化のデータ準備が必要ではありません。 過剰適合しやすく汎化性能が低いです。 「分類」にも「回帰」にも利用可能です。   主要な決定木分析のアルゴリズム 複数ある機械学習アルゴリズムによって異なります。以下に、そのアルゴリズムの一覧を記載します。 種類 分岐に利用する情報 分岐数 目的変数の型 説明変数の型 特徴 CHAID カイ2乗値 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 学習アルゴリズムの中で、最も古いものとして知られています。CARTやC5.0では過学習させてから枝刈りを行いますが、CHAIDでは過学習が起こるまえに木構造の生長を止めます。 CART ジニ係数 2分岐まで 数値変数・カテゴリカル変数 数値変数・カテゴリカル変数 CARTは、C5.0と並び、決定木を構築する代表的なアルゴリズムとして用いられています。CARTでは、過学習を避け、正確な予測モデルを構築するために、いったん木を生長させた後に枝刈りを行います。 ID3 エントロピー 2分岐まで カテゴリカル変数 数値変数・カテゴリカル変数 「繰り返し2分木生成器」と呼ばれる学習アルゴリズムです。最も単純な機械学習アルゴリズムとしても知られています。ヒストリカル変数に対して情報量を用いて、木を構築します。 C4.5 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 ID3の改善版となる学習アルゴリズムです。メモリ効率が良く、意思決定ツリーが小さく、またboostingと呼ばれる技術により高精度であることが利点です。 C5.0 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 C4.5の改善版で、決定木を構築する代表的なアルゴリズムのひとつです。C4.5に比べ、より効率的にメモリを使用することでパフォーマンスの改善が行われています。CARTとよく似ていますが、CARTでは常に2分木構造の決定木を生成しますが、C5.0では3分岐以上の木を生成することができます。   では、Pythonの scikit-learnで決定木のモデル作成し、dtreevizで可視化します。 …

決定木分析 Read More »

クラスター数の決め方の1つシルエット分析

シルエット分析(Silhouette analysis)とは シルエットは、クラスターの解釈と一貫性な評価の手法です。各クラスターにどれくらいうまくグループしているかを簡潔にグラフィカルに表現します。 シルエット分析は、クラスタリングの結果を評価する事ができます。 シルエットプロットは、1つのクラスター内の各点が隣接するクラスター内のどの点にどれくらい近いかを示すもので、クラスター数などのパラメーターを視覚的に評価する方法です。 この評価の範囲は[-1、1]です。 +1に近いシルエット係数は、標本が隣接するクラスターから遠く離れていることを示します。クラスタリングの分離性能が良いと判断できます。0の値は、隣接する2つのクラスター間の決定境界にあるか、またはそれに非常に近いことを示しており、分離性能が悪い事を示しています。マイナス値だとクラスター化されたサンプルは間違ったクラスターに所属している可能性があります。できる限り1に近い事が目標になります。 実験: 今回の分析は、クラスター数の決め方法を説明します。 シルエットプロットは、3,5,6のクラスター数が、平均シルエットスコア以下になります。シルエット分析は、2と4のクラスター数は高いシルエットスコアになっています。シルエットスコアを使う時に、注意しないといけない事として分離の具合を評価している指標のため、クラスター数が少ないときは高くスコアが出ます。そのため、シルエットプロットも確認し、各クラスターの厚さが似ている事とシルエットスコアの先端部分が超えている事を確認し、クラスター4とします。 Out: For n_clusters = 2 The average silhouette_score is : 0.7049787496083262 For n_clusters = 3 The average silhouette_score is : 0.5882004012129721 For n_clusters = 4 The average silhouette_score is : 0.6505186632729437 For n_clusters = 5 The average silhouette_score is : 0.56376469026194 For n_clusters = 6 …

クラスター数の決め方の1つシルエット分析 Read More »