センサーデータアナリティクスの開発から運用まで · case# 1/6 :...
TRANSCRIPT
1© 2016 The MathWorks, Inc.
センサーデータアナリティクスの開発から運用まで
MathWorks® Japan
アプリケーションエンジニアリング部
アプリケーションエンジニア
吉田 剛士
2
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築
データへのアクセスと探索
データの前処理 予測モデルの構築 システムへの統合
CSVファイル
3
データの整理整頓生データそのままでは解析作業が進まない
生データに潜む様々な課題1. 不要なデータが混入してしまっている
2. データが取得できていない(欠損データの存在)
3. 想定していたファイルが丸ごとない
4. 異なるファイル同士を結合したい(同期処理)
5. カラム名 / 変数名が日本語になってしまっている
6. データ量が膨大This file contains sensor data from a 3D acceleration …
Time Location Temperature AccelerationX AccelerationY 加速度Z …
2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395
2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949
2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051
2016/10/19 00:00:03 outside 30 3.6602 2.3353
2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306
2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613
2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277
2016/10/19 00:00:07 outside 30 3.3935 2.3979
2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437
2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974…
4
データの整理整頓Case# 1/6 : 不要データをスキップしたインポート
Challenge– 先頭の数行には、ファイルまたはデータの説明やメタ情報がありこれらは不要
– 解析には不要なカラムが存在
This file contains sensor data from a 3D acceleration …
Time Location Temperature AccelerationX AccelerationY AccelerationZ …
2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395
2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949
2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051
2016/10/19 00:00:03 outside 30 3.6602 2.3353
2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306
2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613
2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277
2016/10/19 00:00:07 outside 30 3.3935 2.3979
2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437
2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974…
5
データの整理整頓Case# 1/6 : 不要データをスキップしたインポート
Solution– detectImportOptions
の利用
This file contains sensor data from a 3D acceleration …
Time Location Temperature AccelerationX AccelerationY AccelerationZ …
2016/10/19 00:00:00 outside 30 8.6007 3.5105 2.4395
2016/10/19 00:00:01 outside 30 8.5656 3.6618 2.3949
2016/10/19 00:00:02 outside 30 8.6011 3.549 2.3051
2016/10/19 00:00:03 outside 30 3.6602 2.3353
2016/10/19 00:00:04 outside 30 8.8312 3.7 2.2306
2016/10/19 00:00:05 outside 30 8.8293 3.5471 2.2613
2016/10/19 00:00:06 outside 30 8.829 3.5477 2.277
2016/10/19 00:00:07 outside 30 3.3935 2.3979
2016/10/19 00:00:08 outside 30 9.1325 3.5467 2.4437
2016/10/19 00:00:09 outside 30 8.9045 3.4698 2.3974…
>> FileName = 'sampledata.csv';
>> fileinfo = detectImportOptions(FileName, 'NumHeaderLines', 1); % 先頭行をスキップ>>
>> % 必要な変数名を指定>> fileinfo.SelectedVariableNames = {'Time', 'AccelerationX', 'AccelerationY', …};
>>
>> DataVar = readtable(FileName, fileinfo);
6
データの整理整頓Case# 2/6 : 欠損データの取り扱い
Challenge– 欠損値があるけど記述統計量(平均や最大値、最小値など)を求めたい
– 欠損箇所を補間したい
Solution– nan○○ 関数の利用
nanmean / nanmax / nanmin / nanstd / nanvar / etc.
– interp1 関数の利用
スプライン補間した例
>> x = DataTable.AccelerationX(1:5)
x =
8.6007
8.5656
8.6011
NaN
8.8312
>>
>> mean(x)
ans =
NaN
>>
>> nanmean(x)
ans =
8.6497
7
データの整理整頓Case# 3/6 : ファイルの欠損
Challenge– 想定しているファイルが存在しない事が
ありプログラムが異常停止する
Solution– exist 関数の利用
– try – catch 構文の利用
PATH = '<File Path>';
if exist(PATH, 'file') == 2
:
else
warning(['Failed: ', PATH, ' is missing!!']);
end
フォルダの場合はexist(PATH, 'dir') == 7
ErrorData = cell(1,1); % Initialize
n = 0;
for m = 1:NumFiles % Or while loop
try
:
catch ME
n = n + 1;
ErrorData{n,1} = ME;
end
end
8
データの整理整頓Case# 4/6 : ファイルの結合 / データの同期
Challenge– 2つのファイルを時刻情報に基いて結合したい
– サンプリング周波数が異なるデータを結合したい
Solution– timetable の利用
時刻情報に基づいた結合の例
>> % 時刻に該当する列を datetime 配列へ変換>> DataVar.Time = datetime(DataVar.Time, 'InputFormat', …
'yyyy/MM/dd HH:mm:SS', 'Format', 'yyyy-MM-dd HH:mm:SS');
>>
>> % テーブル配列をタイムテーブルへ変換>> TimeTabel = table2timetable(DataVar, 'RowTimes', 'Time');
>> % 2つのタイムテーブル配列が有する Time 列を利用して結合>> TimeTable3 = join(TimeTable1, TimeTable2);
9
データの整理整頓Case# 4/6 : ファイルの結合 / データの同期
Solution– timetable の利用
サンプリング周期が異なる
データを結合する例
>> TimeTableC = synchronize(TimeTableA, TimeTableB, 'nearest');
10
データの整理整頓Case# 5/6 : 日本語のカラム名
Challenge– 変数名 / カラム名に日本語が入ってしまっている
Solution– 対処療法として、Excel を使って 日本語名と英語名を管理し
警告: 有効な MATLAB 識別子になるように変数名が変更されました。元の名前は VariableDescriptions プロパティに保存されています。
11
データの整理整頓Case# 5/6 : 日本語のカラム名
– インポートした後、VariableNames プロパティによる刷新
>> % カラム名対応表を収めた Excel のインポート>> [~, ColumnNameDict] = xlsread('ColumnsNameList.xlsx', 'Sheet1', 'B1:G2');
>>
>> % 対象ファイルのメタ情報を取得>> FileName = 'Sample.csv';
>> fileinfo = detectImportOptions(FileName);
>>
>> % VariableNames の値を刷新>> fileinfo.VariableNames = ColumnNameDict(2,:);
>> DataTable = readtable(FileName, fileinfo);
12
データの整理整頓Case# 6/6 : 大量データへの対応
Challenge– ファイル数が膨大なため解析ができない
Solution– 並列分散処理が有効
Parallel Computing Toolbox™ & MATLAB Distributed Computing Server™ の利用
あるデータセット (約1200のCSVファイル / 計約400MB) に対する統計および集約処理のベンチマーク
0
5
10
15
1 core 6 cores * 2 Hosts
Hour
Num of CPU cores
CPU コア数 高速化率
1 -
6✕2ホスト 10.20
13
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築
データへのアクセスと探索
データの前処理 予測モデルの構築 システムへの統合
14
時系列の分類デモ:テキストマイニングの手法を応用した水道使用傾向の分類
水道の使用状況から5つのクラスに家庭を分類
Typical
Constant
High Usage
Low Usage
Untenanted
15
時系列の分類Approach
1. 約3ヶ月分の時系列データを部分時系列に分解
2. 分解された部分時系列に対して、いくつかのグループへクラスタリング
3. グループ番号を文字とみなしてTF-IDFによって時系列の特徴量を算出
4. 様々な機械学習アルゴリズムを試行
5. 検証用データを使った学習器のテスト
5 3 7 1 4 3 6 6 2 4 4 5 …
TS_Name TFIDF1 TFIDF2 TFIDF3 …
A-01 0.0267 0.0259 0.0487 …
A-02 0.0252 0.0544 0.0171 …
B-07 0.0307 0.0395 0.0652 …
B-09 0.0562 0.0385 0.0837 …
: : : : :
K-17 0.0399 0.0651 0.0275 …
T
C
HU
T
C
A-03? B-08? G-01?
16
Step1. 時系列を部分時系列へ分割
時系列A
時系列B
17
Step2. 部分時系列のクラスタリング
5 3 7 1 4 3 6 6 2 4 4 5 5 6 2 5 5 2 1 4 7 3 5 …
18
Step2. 部分時系列のクラスタリング
Cluster #
1
2
3
4
5
6
7
:
19
Step2. 部分時系列のクラスタリング
Dynamic Time Warping– 時系列ペアに関する相違度を求める計算方法
DTW を用いて時系列を3つにクラスタリングした例
K-Medoids + DTW
Signal Processing Toolbox™
20
Step3. TF–IDF による各時系列の特徴量を算出Term Frequency – Inverse Document Frequency
Term Frequency– 定義
– 例
Inverse Document Frequency – 定義
– 例
文章 di にて単語 t が登場する回数:),( idtTF
文章 di 内における総単語数
log:)( tIDF文章 di の総数
単語 t が登場する 文章の数+ 1
MATLAB is the language of technical computing and MATLAB product family supports the entire data analysis process.
TF(‘MATLAB’, di) 0.117617
2
d1 : MATLAB is the language of technical computing.d2 : MathWorks provides MATLAB and Simulink.d3 : MathWorks has released R2016b.
IDF(‘MATLAB’)
1.4055
12
3log
21
Step3. TF–IDF による各時系列の特徴量を算出Term Frequency – Inverse Document Frequency
TF-IDF– 定義
– 例
)(),(:),( tIDFdtTFdtIDF ii TF
d1 : MATLAB is the language of technical computing.d2 : MathWorks provides MATLAB and Simulink.d3 : MathWorks has released R2016b.
TF-IDF(‘MATLAB’, d1) 2008.012
3log
7
1
TF-IDF(‘MathWorks’, d3) 3514.012
3log
4
1
単語 t にクラスタの番号、文章 di に各時系列が対応
22
Step4. 機械学習アルゴリズムの試行Classification Learner
学習アルゴリズムを対話的に検討
Statistics & Machine Learning Toolbox™
23
Step5. 学習器のテスト正答率評価、およびパラメータ調整
混合行列 (Confusion Matrix)
ROC曲線
Bayesian Optimization– 学習器のパラメータ(ハイパーパラメータ)を調整
bayesopt / BayesianOptimization
24
Agenda
センサーデータの整理整頓
時系列の分類
解析環境の構築– どこでデータを整理して、どこで解析を実施するのか
データへのアクセスと探索
データの前処理 予測モデルの構築 システムへの統合
25
解析環境の構築よくあるシステム構成
エッジ・コンピューティング
26
解析環境の構築よくあるシステム構成
サーバー・コンピューティング
27
エッジ・コンピューティングを実現するには?MATLAB Coder™ または MATLAB Compiler™ によるエッジ処理
デバイスへの実装
MATLAB Coder™
MATLABRuntime
制御/監視端末への実装
MATLAB
Compiler SDK™
MATLAB
Compiler™
28
サーバー・コンピューティングを実現するには?MATLAB Production Server™ によるデータ解析システム
低遅延で高トランザクションな解析を実現する MATLAB Production Server
MATLAB Production Server
DB / DWH
• Web Browser
• Microsoft® Excel®
End User
HTTP /
HTTPSLoad
BalancerC/C++
Java™
.NET
Python™
29
Web Application の例
アメリカ北東部の電力需要予測
30
エッジ・コンピューティング vs. サーバー・コンピューティング
エッジ・コンピューティング サーバー・コンピューティング
製品 MATLAB Coder MATLAB Compiler MATLAB Production Server
特徴 C/C++コード生成 ランタイム上で動作する実行形式などを生成
低遅延な計算サービスを提供するサーバ向け製品
サポート製品 一部のMATLAB関数と一部のMATLAB Product Family
ほぼ全てのMATLAB Product Family
ほぼ全てのMATLAB Product Family
エッジ端末への実装 豊富な機能をロイヤリティ・フリー
で展開複数同時アクセスをサポート
サポート関数及び機能が限定的バージョン管理
バージョン管理 環境の構築
31
まとめ
テーブル配列やタイムテーブル配列には便利な前処理が充実
アルゴリズムを網羅的に実行できるため試行錯誤が容易
データ解析のためのシステム構築を見据えたアプリケーション開発環境を提供
データへのアクセスと探索
データの前処理 予測モデルの構築 システムへの統合