フィルタリング機能を用いて分析する

ここでは、RAPID機械学習 マッチング Python APIのフィルタリング機能を用いた分析の例として、 ある求人企業1社にマッチする求職者を予測します。

データを準備する

  1. ユーザがアクセス可能なディレクトリにrapid-matching-python-getting_started.zipを格納します。

  2. 格納したファイルを解凍します。

    $ unzip rapid-matching-python-getting_started.zip -d ~/work
    
  3. [work/examples/filtering] ディレクトリに移動します。

    $ cd ~/work/examples/filtering/
    
  4. 分析データファイル内の root_path[work/examples/filtering/data] ディレクトリの絶対パスを指定します。

    $ sed -i '2c "root_path": "'$(pwd)/data/\", data/data_conf_sse.json
    

分析を実行する

1. データ加工

学習データと予測データの加工を行います。

In [1]:
from rapid_matching_python import convert

convert('cls', 'data/data_conf_sse.json')
[END]

2. 予測モデル作成

学習データを用いて分類問題の予測モデルを作成します。

In [2]:
from rapid_matching_python import train_filtering

train_filtering('cls', 'data/data_conf_sse_new.json', 'data/hparam_sse.json')
 
 
[train] avg_loss: 0.25391
 
 
[train] avg_loss: 0.01033
 
 
[train] avg_loss: 0.00530
 
 
[train] avg_loss: 0.00344
 
 
[train] avg_loss: 0.00284
 
 
[train] avg_loss: 0.00234
 
 
[train] avg_loss: 0.00251
 
 
[train] avg_loss: 0.00163
 
 
[train] avg_loss: 0.00172
 
 
[train] avg_loss: 0.00161
 
 
[train] avg_loss: 0.00114
 
 
[train] avg_loss: 0.00071
 
 
[train] avg_loss: 0.00144
 
 
[train] avg_loss: 0.00089
 
 
[train] avg_loss: 0.00034
 
 
[train] avg_loss: 0.00033
 
 
[train] avg_loss: 0.00122
 
 
[train] avg_loss: 0.00129
 
 
[train] avg_loss: 0.00125
 
 
[train] avg_loss: 0.00181
[END]

3. 結果評価

予測データと予測モデルを用いて予測を実行します。

In [3]:
from rapid_matching_python import predict_filtering

predict_filtering('cls', 'data/data_conf_sse_new.json', 'data/hparam_sse.json')
[[ 500    0]
 [  18 1982]]
Precision: [0.96525097 1.        ]
Recall: [1.    0.991]
Accuracy: 0.9928
[END]

予測結果を表示します。

In [4]:
import pandas as pd

result_df = pd.read_csv('data/predict/result_cls.csv', index_col='q_id')
result_df.head(5)
Out[4]:
truth predict score_P score_N
q_id
1100001 P P 1.0 0.0
1100005 P P 1.0 0.0
1100009 P P 1.0 0.0
1100013 P P 1.0 0.0
1100017 P P 1.0 0.0

正解ラベルごとのフィルタリングスコアをグラフに表示して確認します。

In [5]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

df_p = result_df[result_df['truth']=='P']['score_P']
df_n = result_df[result_df['truth']=='N']['score_P']
hist_p, bins_p = np.histogram(df_p, bins=1001, range=(0, 1.001))
hist_n, bins_n = np.histogram(df_n, bins=1001, range=(0, 1.001))
plt.plot(bins_p[:-1], hist_p, 'blue')
plt.plot(bins_n[:-1], hist_n, 'red')
plt.plot([0.5, 0.5], [0.0, max(hist_p.max(), hist_n.max())], 'black', linestyle='dashed')
plt.ylim(0, max(np.r_[hist_p, hist_n]))
plt.xlabel("Score for label P")
plt.ylabel("Number of samples")
plt.show()