はじめに
- 実際の業務フローが見えない
- どの改善が本当に効果があるのかわからない
- システムから得たデータが十分に使えていない
本記事では、これらの問題をプロセスマイニング(業務システムの動きを分析して、実際の動作を図で可視化する技術)を使って解決する方法を勉強していきます。
1. 開発環境の準備
必要なツールのインストール
最初に必要なツールをインストールします。
# Python環境のセットアップ
python -m pip install --upgrade pip
pip install pm4py pandas numpy scikit-learn
# 動作確認(エラーが出なければOK)
python -c "import pm4py; print(pm4py.__version__)"
よくあるエラーと解決方法
- pm4pyのインストールエラー
# エラーメッセージ
ImportError: No module named 'pm4py'
# 解決方法
pip install --upgrade pip # pipを最新版に
pip install pm4py --no-cache-dir # キャッシュを使わずインストール
- Graphvizエラー
# エラーメッセージ
GraphvizNotFound: Graphviz is required but not installed.
# 解決方法(Windowsの場合)
choco install graphviz
# PATHが通っていることを確認
echo %PATH% | findstr "Graphviz"
プロセス分析の基本実装
参考実装(動作は環境依存します)
import pm4py
from pm4py.objects.log.importer.xes import importer as xes_importer
from pm4py.objects.log.importer.csv import importer as csv_importer
from pm4py.algo.discovery.inductive import factory as inductive_miner
class ProcessMining:
def __init__(self):
"""
プロセスマイニング分析クラス
"""
self.supported_formats = ['.xes', '.csv']
def analyze_process(self, log_file: str, noise_threshold: float = 0.2):
"""
イベントログを分析し、プロセスモデルを生成
Args:
log_file (str): 分析対象のログファイルパス
noise_threshold (float): ノイズ除去閾値(0.0〜1.0)
Returns:
dict: プロセスモデルと基本メトリクス
"""
try:
# ファイル形式ごとの読み込み
if log_file.endswith('.xes'):
log = xes_importer.apply(log_file)
elif log_file.endswith('.csv'):
log = csv_importer.apply(log_file)
else:
raise ValueError(f"サポートされていない形式: {log_file}")
# プロセスモデル生成
parameters = {"noise_threshold": noise_threshold}
process_model, initial_marking, final_marking = inductive_miner.apply(log, parameters=parameters)
# 簡単な指標の計算
case_count = len(log)
activity_count = len({event["concept:name"] for trace in log for event in trace})
return {
"process_model": {
"model": process_model,
"initial_marking": initial_marking,
"final_marking": final_marking
},
"metrics": {
"case_count": case_count,
"activity_count": activity_count
}
}
except Exception as e:
raise RuntimeError(f"エラー: {e}")
注記: 上記のコードは参考例です。動作環境(Pythonバージョン、pm4pyライブラリのバージョン)に依存します。
使用例
# 使用例
analyzer = ProcessMining()
result = analyzer.analyze_process("example_log.xes", noise_threshold=0.2)
print("ケース数:", result["metrics"]["case_count"])
print("アクティビティ数:", result["metrics"]["activity_count"])
改善アクションの考え方
プロセス分析結果の解釈例
-
プロセスのバリエーションが多い:
- 問題点:プロセスが複雑化し、標準化が難しい。
- 解決策:標準的なフローを特定し、例外処理を削減。
-
アクティビティ数が多い:
- 問題点:業務が細分化し、手順が非効率。
- 解決策:活動の統合や不要なステップの削減を検討。
-
処理時間が長い:
- 問題点:ボトルネックが発生している可能性。
- 解決策:リソースの再割り当てや自動化の導入を検討。
注記:これらの改善案は一般的な参考例であり、各組織のデータや状況に応じて調整が必要です。
不確実な情報の注釈
本記事の実装例は、動作環境に依存するため保証はありません。
「この部分は環境により異なる可能性があります」と記載した部分は、データ要件やツールのバージョン差異により動作が変わる可能性があります。
参考資料・リソース
- プロセスマイニング入門書
- "Process Mining: Data Science in Action" by Wil van der Aalst
- 技術資料