弊社にもようやくSAS Viyaがインストールされましたので、色々触ってみました。
SAS Viyaとは、複雑な分析(機械学習、ディープラーニング、人工知能)の
高速性・正確性・信頼性をより一層高めるために開発された、
クラウド対応のインメモリ・アナリティクス・エンジンです。
昨今、分析のデータ量は大きくなり、機械学習の処理も複雑化しているため、
ローカルマシンではマシンスペックに合わせた処理にしなくてはなりません。
SAS Viyaではクラウドベースであるので処理が早く、
メモリもあまり気にする必要がありません。
さらに、SAS Viyaでは様々な言語(Python、R、Java、Lua)から
使用することができ、SASを触ったことがない方でも
簡単に使用することができます。
今回は、PythonからSAS Viyaで機械学習モデルを構築します。
まずはPythonからSAS Viyaに接続しましょう。
なお、フォルダ構成は以下を想定しております。
sasviya
├─sasviya.ipynb
├─config
│ └─setting.ini
└─data
└─UCI_Credit_Card.csv
[DEFAULT]
URL = <SAS ViyaのURL>/cas-shared-default-http/
ID = <ユーザーID>
PASSWORD = <パスワード>
import swat
import pandas as pd
import matplotlib.pyplot as plt
from configparser import ConfigParser
pd.options.display.max_columns = None
pd.options.display.float_format = '{:.2f}'.format
config = ConfigParser()
config.read('./config/setting.ini')
sess = swat.CAS(config['DEFAULT']['URL'],8080,config['DEFAULT']['ID'], config['DEFAULT']['PASSWORD'])
sess.serverstatus()
この章では、SAS Viyaのデータの中身を確認していきます。
まずはローカルファイルのUCI_Credit_Card.csvをCASサーバにアップロードします。
castbl = sess.upload_file(data='./data/UCI_Credit_Card.csv',
casout=dict(name='CreditCard',
caslib='casuser', replace=True))
# データの中身を確認
castbl.head()
# データの変数情報を確認
castbl.info()
# ヒストグラムを表示
castbl.hist(figsize=[15,15])
plt.show()
ほかにもpandasと同様の書き方で、様々な可視化をすることができます。
SAS Viyaではアクションセットを使用してモデルを構築します。
アクションセットとはBase SASのプロシジャやPythonのモジュールみたいなもので、
使用する際に宣言する必要があります。
今回は、勾配ブースティングを使用するためのアクションセット「decisionTree」と、
データを分割するためのアクションセット「sampling」を読み込みます。
#アクションセットのロード
sess.loadactionset("decisionTree")
sess.loadactionset("sampling")
# データの分割
sess.sampling.stratified(
table={"name":"CREDITCARD", "groupBy":"default.payment.next.month"},
output={"casOut":{"name":"CREDITCARD_part", "replace":True}, "copyVars":"ALL"},
samppct=70,
partind=True
)
sess.CASTable("CREDITCARD_part").head(5)
次に学習を行います。
ハイパーパラメータを設定し、trainデータを使用して学習します。
今回使用した変数は「PAY_0」、「PAY_2」、「LIMIT_BAL」、「AGE」です。
# 勾配ブースティング学習
sess.decisionTree.gbtreeTrain(
table={
"name":"CREDITCARD_part",
"where":"strip(put(_partind_, best.))='1'"
},
inputs=["PAY_0", "PAY_2","LIMIT_BAL", "AGE"],
target="default.payment.next.month",
nTree=100,
nBins=20,
maxLevel=6,
varImp=True,
missing="USEINSEARCH",
casOut={"name":"gb_model", "replace":True}
)
# 勾配ブースティングスコアリング
score = sess.decisionTree.dtreeScore(
table={
"name":"CREDITCARD_part",
"where":"strip(put(_partind_, best.))='0'"
},
modelTable={"name":"gb_model"},
casOut={"name":"_scored_tree", "replace":True},
copyVars={"ID","default.payment.next.month"}
)
scored_tree = sess.CASTable("_scored_tree")
scored_tree.head()
赤枠で囲ったところが予測確率です。
スコアリングしたデータをローカルに保存するには以下のようにします。
scored_tree = sess.CASTable("_scored_tree")
scored_tree[["ID","_GBT_PredMean_"]].to_csv("./data/UCI_Credit_Card_pred.csv",index=False)
データ分析を行うのであれば、必ずモデルに対する評価を行わなければなりません。
SAS Viyaでは、もちろん評価を行うことができます。
今回はアクションセットの「percentile」を使用して、評価指標であるAUCを算出します。
sess.loadactionset("percentile")
pred = sess.percentile.assess(table = {"name": "_scored_tree"},
inputs = [{"name": "_GBT_PredMean_"}],
response = "default.payment.next.month",
event = "1"
)
auc=pred["ROCInfo"]["C"].drop_duplicates()[0]
print("AUC=",auc)
%matplotlib inline
plt.figure(figsize = (8,6), dpi = 100)
plt.plot(pred.ROCInfo["FPR"], pred.ROCInfo["Sensitivity"])
plt.plot([0,1], [0,1], "k--")
plt.grid(True)
plt.title("ROC Curve : AUC={:.4f}".format(auc))
plt.show()
ROC曲線まで簡単に描けるのは素晴らしいですね!
今回はPythonからSAS Viyaを使用して機械学習モデルを構築しました。
SAS ViyaではほかにもCross Validationや、ディープラーニング、テキストマイニング等
様々なタスクを行うことができます。
今後もSAS Viyaについてのブログを発信していけたらなと思います。
コメント