プロセス分析の始め方:Process Miningで洞察を得る実践ガイド
Process Mining のダッシュボードを、現場で使える示唆に変える。データの理解、パターン探索、真の改善機会の見つけ方を段階的に学べます。
このガイドで学べること
このガイドでは、Process Mining の event log をゼロから作る方法を学びます。必須の3列を押さえ、実例で手順を確認し、Excel と SQL の両方で最初の event log を作成するところまで一緒に進めます。
関連: プロセス改善 について学び、システム別のデータテンプレート をご覧ください。あわせて、標準コネクタを使わない理由 もお読みください。シンプルなデータテンプレートを推奨する背景を解説しています。
プロセスマイニングのイベントログは、ビジネスプロセスで起きた出来事を記録するシンプルなデータの表です。システムを流れる各ケースの全ステップを追跡する「日誌」のようなものです。プロセスマイニングソフトウェアはこの日誌を読み取り、実際のプロセスがどう動いているかを可視化します。
イベントログには、各行に次の3つの必須情報が必要です:
| 列 | 意味 | 例 |
|---|---|---|
| Case ID | 関連するイベントをひとまとめにする一意の識別子 | Order #12345 |
| Timestamp | イベントが発生した日時 | 2025-01-15 09:30:00 |
| Activity | 何が起きたか | 「受注登録」 |
以上です。この3列だけでプロセスマイニングを始められます。顧客名、受注金額、社員IDといった情報は任意の「属性」で、分析をより豊かにするためのオプションです。
先に、よくある混同を整理しておきましょう。
アクティビティは「Order Shipped」や「Payment Received」のような行為の種類。カテゴリやラベルのようなものです。
イベントは、そのアクティビティが特定のケースで実際に起きた出来事。たとえば注文 #12345 が1月15日14:30に出荷された、その発生がイベントです。
イベントログにはイベントが並びますが、各イベントにはアクティビティ名が付いています。現場ではこの2つの言葉を混ぜて使うこともありますが、覚えておきたいのは「アクティビティは何を、イベントはいつ・誰に起きたか」です。
手を動かしやすいように、架空のシステムで考えてみましょう。あなたはオンライン注文に対応したローカルのピザ店 Pizza Palace の運営者。顧客は Web サイトで注文し、店内で調理して、ドライバーが配達します。
Pizza Palace には、受注プロセスの各段階を記録するテーブルがいくつかあります。
目標は、注文受付から配達完了までの流れを1つの event log にまとめて見える化することです。
event log を作る際には、大きく2種類の event があります。
直接イベントはシステムに明示的に記録されます。ユーザーのクリックやシステムの自動記録により、タイムスタンプがそのままデータベースに保存されます。
Pizza Palace の例:
orders テーブルのタイムスタンプ)payments テーブルのタイムスタンプ)delivery_assignments テーブルのタイムスタンプ)推定イベントには固有のタイムスタンプはありませんが、他のデータを手がかりに発生時点を推測できます。
Pizza Palaceの例:
delivery_assignments テーブルの created_at から割り当て時刻がわかります大きな違い: 直接イベントは明示的に記録されますが、推定イベントは他のデータを解釈して導きます。どちらもプロセスマイニングで有用です。
データを抽出する前に、どの event を記録するかを設計しましょう。Pizza Palace では次のアクティビティを追跡します。
各 event について以下を特定します。
対応関係は次のとおりです。
| アクティビティ | ソーステーブル | Timestamp フィールド | Case ID フィールド |
|---|---|---|---|
| 注文受付 | orders | created_at | id |
| 入金完了 | payments | payment_time | order_id |
| キッチンへ送信 | kitchen_queue | queue_entry_time | order_id |
| 調理完了 | kitchen_queue | completed_time | order_id |
| ドライバー割り当て | delivery_assignments | assigned_at | order_id |
| 配達完了 | delivery_assignments | delivered_at | order_id |
Case ID、Timestamp、Activity は必須ですが、属性を加えると分析がぐっと強力になります。属性は、背景情報を与える追加カラムです。
ケース(注文)全体を表す属性で、同じケース内のすべてのイベントで共通です:
イベントごとに固有の属性です:
コツ: 適用されない属性があっても、全行に同じ列を持たせて構いません。例えば「Order Placed」の行に「Driver Name」列があっても空でOKです。シンプルなフラットなテーブル形式を保てるため、プロセスマイニングツールとの相性が良くなります。
最終的な event log は、1行が1つの event を表す、単一のテーブルにします。Pizza Palace の event log は次のようになります。
| Case ID | Timestamp | Activity | 顧客 | 注文金額 | ドライバー | 支払方法 |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 注文受付 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:30:15 | 入金完了 | John Smith | 45.99 | クレジットカード | |
| 1001 | 2025-01-15 18:31:00 | キッチンへ送信 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:45:00 | 調理完了 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:46:00 | ドライバー割り当て | John Smith | 45.99 | Maria Garcia | |
| 1001 | 2025-01-15 19:05:00 | 配達完了 | John Smith | 45.99 | Maria Garcia | |
| 1002 | 2025-01-15 18:35:00 | 注文受付 | Jane Doe | 28.50 | ||
| 1002 | 2025-01-15 18:35:20 | 入金完了 | Jane Doe | 28.50 | PayPal | |
| … | … | … | … | … | … | … |
同じ Case 内では、Case 属性(例:顧客、注文金額)が event ごとに繰り返されます。この重複は意図的なもので、後の加工や分析をぐっと楽にします。
データをスプレッドシートにエクスポートできるなら、手作業で event log を作成できます。小規模データや学習用途に最適です。
アクティビティごとにワークシートを1枚作成します。
シート1:Order Placed
| Case ID | Timestamp | Activity | Customer | Order Value |
|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | Order Placed | John Smith | 45.99 |
| 1002 | 2025-01-15 18:35:00 | Order Placed | Jane Doe | 28.50 |
シート2:Payment Received
| Case ID | Timestamp | Activity | Customer | Order Value | Payment Method |
|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:15 | Payment Received | John Smith | 45.99 | Credit Card |
| 1002 | 2025-01-15 18:35:20 | Payment Received | Jane Doe | 28.50 | PayPal |
すべてのシートで同じ列を同じ順序に揃えます。必要なら空の列を追加します。
シート1:Order Placed(更新)
| Case ID | Timestamp | Activity | Customer | Order Value | Driver | Payment Method |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | Order Placed | John Smith | 45.99 |
新しい「Event Log」シートを作成し、各アクティビティのシートから行を順にすべて貼り付けて1つにまとめます。
全データを選択し、次の順でソートします。
各ケース内で時系列が整い、各注文の流れを追いやすくなります。
結合したシートをCSVで保存します。ほとんどのプロセスマイニングツールで利用できます。
Excelのコツ:
大規模データや定期的な抽出には、SQL のほうが効率的で再現性も高いです。ポイントは、UNION ALL を使って複数のクエリ結果を1つの結果セットに結合することです。
UNION ALLは、複数のSELECT文の結果を縦に積み重ねて1つの結果セットにします。すべてのSELECTで列数をそろえ、互換性のあるデータ型にしておく必要があります。
Pizza Palace のイベントログを作成するための SQL クエリ例です:
-- Event Log Extraction for Pizza Palace
-- This query combines multiple event types into a single event log
-- Each SELECT block represents one activity type
-- Event 1: Order Placed
-- Source: orders table
-- This captures when customers submit their orders
SELECT
o.id AS case_id, -- The order ID is our case identifier
o.created_at AS timestamp, -- When the order was placed
'Order Placed' AS activity, -- The activity name (hardcoded)
o.customer_name AS customer, -- Case attribute: who ordered
o.total_amount AS order_value, -- Case attribute: order value
NULL AS driver, -- Not applicable for this event
NULL AS payment_method -- Not applicable for this event
FROM orders o
WHERE o.created_at >= '2025-01-01' -- Filter to your desired date range
UNION ALL
-- Event 2: Payment Received
-- Source: payments table
-- This captures successful payment processing
SELECT
p.order_id AS case_id,
p.payment_time AS timestamp,
'Payment Received' AS activity,
o.customer_name AS customer, -- Join to get case attributes
o.total_amount AS order_value,
NULL AS driver,
p.payment_method AS payment_method -- Event-specific attribute
FROM payments p
JOIN orders o ON p.order_id = o.id -- Join to get order details
WHERE p.payment_time >= '2025-01-01'
AND p.status = 'successful' -- Only include successful payments
UNION ALL
-- Event 3: Order Sent to Kitchen
-- Source: kitchen_queue table
-- This captures when the kitchen starts working on the order
SELECT
k.order_id AS case_id,
k.queue_entry_time AS timestamp,
'Order Sent to Kitchen' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
NULL AS driver,
NULL AS payment_method
FROM kitchen_queue k
JOIN orders o ON k.order_id = o.id
WHERE k.queue_entry_time >= '2025-01-01'
UNION ALL
-- Event 4: Order Ready
-- Source: kitchen_queue table (different timestamp field)
-- This is an inferred event based on when the kitchen marked it complete
SELECT
k.order_id AS case_id,
k.completed_time AS timestamp, -- Different timestamp than entry
'Order Ready' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
NULL AS driver,
NULL AS payment_method
FROM kitchen_queue k
JOIN orders o ON k.order_id = o.id
WHERE k.completed_time >= '2025-01-01'
AND k.completed_time IS NOT NULL -- Only include completed orders
UNION ALL
-- Event 5: Assigned to Driver
-- Source: delivery_assignments table
-- This captures when a driver is assigned to deliver the order
SELECT
d.order_id AS case_id,
d.assigned_at AS timestamp,
'Assigned to Driver' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver, -- Event-specific attribute
NULL AS payment_method
FROM delivery_assignments d
JOIN orders o ON d.order_id = o.id
WHERE d.assigned_at >= '2025-01-01'
UNION ALL
-- Event 6: Delivery Completed
-- Source: delivery_assignments table (different timestamp field)
-- This captures when the order was delivered to the customer
SELECT
d.order_id AS case_id,
d.delivered_at AS timestamp,
'Delivery Completed' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver,
NULL AS payment_method
FROM delivery_assignments d
JOIN orders o ON d.order_id = o.id
WHERE d.delivered_at >= '2025-01-01'
AND d.delivered_at IS NOT NULL -- Only include completed deliveries
-- Final ordering: by case, then by time
-- This makes the event log easy to read and follow
ORDER BY case_id, timestamp;イベントを追加する手順:
例えば「Delivery Attempted」イベントを追加する場合:
UNION ALL
-- Event 7: Delivery Attempted
-- Add this to track failed delivery attempts
SELECT
d.order_id AS case_id,
d.attempt_time AS timestamp,
'Delivery Attempted' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver,
NULL AS payment_method
FROM delivery_attempts d
JOIN orders o ON d.order_id = o.id
WHERE d.attempt_time >= '2025-01-01' まずは必須の3列と、主要なアクティビティだけで十分です。基本の event log を作ってツールに読み込めたら、必要に応じて event や属性を段階的に追加していきましょう。
分析に入る前に、イベントログで起こりがちな問題を確認しましょう:
次を記録しておきましょう:
この記録は、後からイベントログを更新したりトラブルシューティングしたりする際にとても役立ちます。
アクティビティ名は抽出のたびにブレないように保ちましょう:
複数のシステムや地域からデータを集める場合は、すべてのタイムスタンプを同じタイムゾーンに統一してください。整合性重視なら UTC に統一するのが無難です。
一部のイベントには独自のタイムスタンプがないことがあります。例えば「Order Approved」が boolean のフラグでしか持たれていないケースです。
解決策: 関連するタイムスタンプを探しましょう。たとえば approved_at フィールドがあるか、フラグ変更時の modified_at を使う方法があります。
数百万件規模のイベントがあると、抽出時のクエリが遅くなったり落ちたりすることがあります。
解決策:
イベントログをCSVファイルやデータベースのエクスポートとして作成できたら、プロセスマイニングツールに読み込む準備は整いました。多くのツールで手順は似ています:
ProcessMind のような最新のプロセスマイニングツールなら、この流れはとても簡単です。イベントログをアップロードするだけで、プロセスが自動的に可視化され、ボトルネック、ばらつき、改善のチャンスが明らかになります。
プロセスマイニングのイベントログ作成に特別なツールや高度な技術は必要ありません。本質はシンプルです。Case ID(ケースID)、Timestamp(タイムスタンプ)、Activity(アクティビティ)の3列にデータを整理するだけです。
小規模ならExcel、大規模・複雑ならSQLで抽出しても、考え方は同じです:
最も難しいのは技術的な抽出ではなく、どのイベントが重要かを判断できるほど自社のプロセスを理解することです。まずは明らかなイベント(例:受注登録、受注完了)から始め、プロセスマイニングツールが示してくれる気づきを踏まえて、徐々に詳細を追加しましょう。
もっと深掘りしたい方は、継続的なプロセス改善のページ をご覧ください。調達から支払い(Purchase to Pay) 、受注から回収(Order to Cash) 、買掛金・債務管理(Accounts Payable) など、主要プロセスのアクティビティや必要データを詳しく解説しています。SAP、Oracle、Microsoft Dynamicsなどで使えるデータテンプレートも用意しています。イベントログの作成をすぐに始められます。
今日から始めよう
完璧なイベントログを待つ必要はありません。手元のデータで始め、作成したプロセスマップから学び、改善を重ねましょう。基本的なアクティビティだけのシンプルなイベントログでも、実際の業務の姿について驚くような発見が得られます。
Process Mining のダッシュボードを、現場で使える示唆に変える。データの理解、パターン探索、真の改善機会の見つけ方を段階的に学べます。
市販のコネクタは簡単なデータ抽出を約束しますが、現場では複雑化・遅延・ベンダーロックインを招きがち。私たちはデータテンプレートでシンプルに始めます。
データを活用したビジネスプロセス改善と変革をわかりやすく解説。
2025年版CelonisとProcessMindを比較。最適なプロセスマイニングSaaSと料金・機能を紹介。
すぐアクセスでき、クレジットカード不要、待ち時間なし。MAP・MINE・シミュレーションが連携し、より速く賢い意思決定を体験できます。
全機能を使い、深いインサイトを発見し、初日から業務を効率化。
今すぐ無料トライアルでProcess Intelligenceの全機能を活用し、30日以内に本当の改善を実感!
当サイトでは、閲覧体験の向上、コンテンツのパーソナライズ、トラフィックの分析のためにCookieを使用しています。「すべて許可」をクリックすると、Cookieの使用に同意いただいたことになります。