プロセス分析の始め方:Process Miningで洞察を得る実践ガイド
Process Mining のダッシュボードを、現場で使える示唆に変える。データの理解、パターン探索、真の改善機会の見つけ方を段階的に学べます。
このガイドで学べること
このガイドでは、Process Mining の event log をゼロから作る方法を学びます。必須の3列を押さえ、実例で手順を確認し、Excel と SQL の両方で最初の event log を作成するところまで一緒に進めます。
【関連】業務改善の考え方や、システム別のデータテンプレートもチェック。なぜ私たちが「コネクタ」よりシンプルなデータテンプレートを推すのかは、こちらの記事で解説しています。
Process Mining の event log は、業務プロセスで「何が起きたか」を記録した単なるデータ表です。システムを流れる各 Case の各ステップを綴った日誌のようなものです。Process Mining ツールはこの日誌を読み取り、実際のプロセスの姿を可視化します。
各行に必ず必要なのは次の3要素です。
| 列 | 意味 | 例 |
|---|---|---|
| Case ID | 関連する event をまとめるための一意の識別子 | 注文 #12345 |
| Timestamp | その event が起きた時刻 | 2025-01-15 09:30:00 |
| Activity | 何が起きたか | 注文受付 |
これだけです。まずはこの3列だけで Process Mining は始められます。顧客名や注文金額、社員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 に統一するのが無難です。
同一のイベントが複数のテーブルに記録されることがあります。たとえば、出荷時刻を注文システムと ERP の両方が記録している場合です。
解決策: 信頼できる唯一の情報源(source of truth)をひとつ決め、それだけを使います。選定理由は必ずドキュメント化しておきましょう。

一部のイベントには独自のタイムスタンプがないことがあります。例えば「Order Approved」が boolean のフラグでしか持たれていないケースです。
解決策: 関連するタイムスタンプを探しましょう。たとえば approved_at フィールドがあるか、フラグ変更時の modified_at を使う方法があります。
数百万件規模のイベントがあると、抽出時のクエリが遅くなったり落ちたりすることがあります。
解決策:
CSV やデータベースのエクスポートとして event log を用意できたら、Process Mining ツールに読み込みましょう。一般的な手順はどこもほぼ同じです。
ProcessMind のような最新ツールなら操作は簡単。event log をアップロードするだけでプロセスが自動で可視化され、ボトルネックやばらつき、改善の着眼点が浮かび上がります。
Process Mining の event log を作るのに、特別なツールや高度な技術は不要です。本質はシンプルです。Case ID・Timestamp・Activity の3列にデータを整理するだけ。
小規模なら Excel、大規模や定期抽出なら SQL。どちらでも基本は同じです。
一番難しいのは抽出そのものではなく、「どの event が重要か」を理解すること。まずは明らかな event(例:注文受付、配達完了)から始め、ツールで得られる洞察に合わせて少しずつ詳細を足していきましょう。
もっと深掘りするなら、継続的な業務改善のページをご覧ください。購買から支払(Purchase to Pay)、受注から入金(Order to Cash)、買掛金管理(Accounts Payable)など、主要プロセスのアクティビティとデータ要件を詳しく解説しています。SAP、Oracle、Microsoft Dynamics などのテンプレートも用意しており、event log 作成にスムーズに着手できます。
今日から始めよう
完璧な event log を待つ必要はありません。まずは手元のデータで作り、得られたプロセスマップから学び、繰り返し改善しましょう。基本的なアクティビティだけでも、実態を映す意外な気づきが得られます。
Process Mining のダッシュボードを、現場で使える示唆に変える。データの理解、パターン探索、真の改善機会の見つけ方を段階的に学べます。
市販のコネクタは簡単なデータ抽出を約束しますが、現場では複雑化・遅延・ベンダーロックインを招きがち。私たちはデータテンプレートでシンプルに始めます。
データを活用したビジネスプロセス改善と変革をわかりやすく解説。
2025年版CelonisとProcessMindを比較。最適なプロセスマイニングSaaSと料金・機能を紹介。
すぐアクセスでき、クレジットカード不要、待ち時間なし。MAP・MINE・シミュレーションが連携し、より速く賢い意思決定を体験できます。
全機能を使い、深いインサイトを発見し、初日から業務を効率化。
今すぐ無料トライアルでProcess Intelligenceの全機能を活用し、30日以内に本当の改善を実感!