センサーデータアナリティクスの開発から運用まで · case# 1/6 :...

31
1 © 2016 The MathWorks, Inc. センサーデータアナリティクスの開発から運用まで MathWorks ® Japan アプリケーションエンジニアリング部 アプリケーションエンジニア 吉田 剛士

Upload: others

Post on 12-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

1© 2016 The MathWorks, Inc.

センサーデータアナリティクスの開発から運用まで

MathWorks® Japan

アプリケーションエンジニアリング部

アプリケーションエンジニア

吉田 剛士

Page 2: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

2

Agenda

センサーデータの整理整頓

時系列の分類

解析環境の構築

データへのアクセスと探索

データの前処理 予測モデルの構築 システムへの統合

CSVファイル

Page 3: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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…

Page 4: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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…

Page 5: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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);

Page 6: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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

Page 7: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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

Page 8: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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);

Page 9: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

9

データの整理整頓Case# 4/6 : ファイルの結合 / データの同期

Solution– timetable の利用

サンプリング周期が異なる

データを結合する例

>> TimeTableC = synchronize(TimeTableA, TimeTableB, 'nearest');

Page 10: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

10

データの整理整頓Case# 5/6 : 日本語のカラム名

Challenge– 変数名 / カラム名に日本語が入ってしまっている

Solution– 対処療法として、Excel を使って 日本語名と英語名を管理し

警告: 有効な MATLAB 識別子になるように変数名が変更されました。元の名前は VariableDescriptions プロパティに保存されています。

Page 11: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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);

Page 12: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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

Page 13: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

13

Agenda

センサーデータの整理整頓

時系列の分類

解析環境の構築

データへのアクセスと探索

データの前処理 予測モデルの構築 システムへの統合

Page 14: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

14

時系列の分類デモ:テキストマイニングの手法を応用した水道使用傾向の分類

水道の使用状況から5つのクラスに家庭を分類

Typical

Constant

High Usage

Low Usage

Untenanted

Page 15: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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?

Page 16: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

16

Step1. 時系列を部分時系列へ分割

時系列A

時系列B

Page 17: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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 …

Page 18: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

18

Step2. 部分時系列のクラスタリング

Cluster #

1

2

3

4

5

6

7

:

Page 19: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

19

Step2. 部分時系列のクラスタリング

Dynamic Time Warping– 時系列ペアに関する相違度を求める計算方法

DTW を用いて時系列を3つにクラスタリングした例

K-Medoids + DTW

Signal Processing Toolbox™

Page 20: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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

Page 21: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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 に各時系列が対応

Page 22: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

22

Step4. 機械学習アルゴリズムの試行Classification Learner

学習アルゴリズムを対話的に検討

Statistics & Machine Learning Toolbox™

Page 23: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

23

Step5. 学習器のテスト正答率評価、およびパラメータ調整

混合行列 (Confusion Matrix)

ROC曲線

Bayesian Optimization– 学習器のパラメータ(ハイパーパラメータ)を調整

bayesopt / BayesianOptimization

Page 24: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

24

Agenda

センサーデータの整理整頓

時系列の分類

解析環境の構築– どこでデータを整理して、どこで解析を実施するのか

データへのアクセスと探索

データの前処理 予測モデルの構築 システムへの統合

Page 25: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

25

解析環境の構築よくあるシステム構成

エッジ・コンピューティング

Page 26: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

26

解析環境の構築よくあるシステム構成

サーバー・コンピューティング

Page 27: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

27

エッジ・コンピューティングを実現するには?MATLAB Coder™ または MATLAB Compiler™ によるエッジ処理

デバイスへの実装

MATLAB Coder™

MATLABRuntime

制御/監視端末への実装

MATLAB

Compiler SDK™

MATLAB

Compiler™

Page 28: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

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™

Page 29: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

29

Web Application の例

アメリカ北東部の電力需要予測

Page 30: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

30

エッジ・コンピューティング vs. サーバー・コンピューティング

エッジ・コンピューティング サーバー・コンピューティング

製品 MATLAB Coder MATLAB Compiler MATLAB Production Server

特徴 C/C++コード生成 ランタイム上で動作する実行形式などを生成

低遅延な計算サービスを提供するサーバ向け製品

サポート製品 一部のMATLAB関数と一部のMATLAB Product Family

ほぼ全てのMATLAB Product Family

ほぼ全てのMATLAB Product Family

エッジ端末への実装 豊富な機能をロイヤリティ・フリー

で展開複数同時アクセスをサポート

サポート関数及び機能が限定的バージョン管理

バージョン管理 環境の構築

Page 31: センサーデータアナリティクスの開発から運用まで · Case# 1/6 : 不要データをスキップしたインポート Solution –detectImportOptions の利用

31

まとめ

テーブル配列やタイムテーブル配列には便利な前処理が充実

アルゴリズムを網羅的に実行できるため試行錯誤が容易

データ解析のためのシステム構築を見据えたアプリケーション開発環境を提供

データへのアクセスと探索

データの前処理 予測モデルの構築 システムへの統合