注目キーワード
  1. Youtube
  2. 360VR
  3. Vegas Pro

PythonでAIを使って時系列データの異常検出を行う(学習編)

最近の流行として「AIによる異常検出・故障検出」とか「AIを使ってDXで高利率化を行う」とか「AIを使ってコスト削減する」とか言われますが、どうやって良いのか全く分かっておりません。
自己学習の一環としてネットから良さそうなコードを選んで、試してみましたので自分自身の記録として書き綴っておきます。

やりたいこと

仕事でネットワークトラヒックを監視しているのですが、たまに故障等でデータの受付数が「0」になったり、下がったりすることがボチボチあります。受付数が「0」ならIT判断(よくある簡単なプログラム)で「x時間受付が「0」なら警報を出す」とかなら単純なのですが、普段よりも微妙に下がっているとか、微妙に上がっているとかとなると、目視確認で判断する場合もあります。

今の時代、こんなやり方はそぐわないので自分のPython勉強がてらに調整してみました。

世の中的にはこのような考え方らしい

LSTMによる時系列データの異常検知(Keras)
LSTMによる時系列データの異常検知

このアルゴリズムを勉強しようと思う

使用したバージョン

2022/03/01現在の最新バージョンPython3/keras2を使用しています。
【ハマリポイント】
ネットで記載されているソースコードを貼り付けて実行しても大抵はエラーで実行できません。実は、PythonやAIは黎明期であるため、Webサイトには様々なバージョンによって説明されています。
例えばkerasで説明している場合、一部keras2では使用できなくなった関数や置き換わった関数。最新版のPythonでは使用できなくなった関数などあるため、見極めが必要です。見極めは、英語ですが公式ドキュメントを読んで代替方法を自分で模索するしかありません。

参考にした書籍

私が参考にした書籍たち

・Python3年生 機械学習のしくみ
・PythonとKerasによるディープラーニンング
・scikit-learn、Keras、TensorFlowによる実践機械学習第2版
・初めてのTensorFLow

ソースコード説明

関係の無いライブラリのインポートや、途中での変数状態の確認のため余計なプログラムが入っている場合があります。ソースコードを見て、見にくい・下手くそ・全く分からないという誹謗中傷はおやめください。(あくまで、個人の勉強用ですのでご了承ください)

ライブラリーのインポート

#-----------------------------------------------------------------------------------------------------
#必要なモジュールのインポート
#pip install keras-utils
#pip install scikit-mlm
#pip install matplotlib
#pip install numpy
#pip install pandas
#
#TensorFlow(CPU版)インストール
#pip install tensorflow
#
# HDF5フォーマットでモデルを保存するために必要
#pip install -q pyyaml h5py


import os
import sys
import pickle
import json
import keras
import matplotlib.pyplot as plt
import pandas as pd 
import numpy as np 
from sklearn.preprocessing import StandardScaler

from keras.models import Sequential
from keras import layers
from tensorflow import keras
from keras.models import load_model


from tensorflow.keras.optimizers import RMSprop

from scipy import stats
from scipy import optimize

学習データの出力のためにpickleとかもインポートしています。
コメントアウトしている必要なモジュールのインポートを参考にしてください。

基本となるデータの読込

#------------------------------------------------------------------------------
#ベースとなるデータ読み込み
#--------------------------------------
# - pandasでcsvファイル読み込み
# - header=Noneとすると連番が列名columnsに割り当てられる。
# - delimiter='\t'でタブ区切りとしている read_table()ならタブ区切り
# - df = pd.read_csv('./qtdbsel102.txt', header=None, delimiter='\t')
# - df = pd.read_table('./qtdbsel102.txt', header=None)
# - sep/delimiterも同じ意味で使える
# - 上記2つは同じ意味

df = pd.read_csv('./qtdbsel102.txt', header=None, delimiter='\t')

http://www.cs.ucr.edu/~eamonn/discords/qtdbsel102.txt

↑ここから数字データを持ってきます。四万五千行ほどあります。

スポンサーリンク_4