プロセスマイニングのイベントログの作り方

このガイドで学べること

このガイドでは、Process Mining の event log をゼロから作る方法を学びます。必須の3列を押さえ、実例で手順を確認し、Excel と SQL の両方で最初の event log を作成するところまで一緒に進めます。

Process Mining の 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 の受注システム

手を動かしやすいように、架空のシステムで考えてみましょう。あなたはオンライン注文に対応したローカルのピザ店 Pizza Palace の運営者。顧客は Web サイトで注文し、店内で調理して、ドライバーが配達します。

Pizza Palace には、受注プロセスの各段階を記録するテーブルがいくつかあります。

  • orders - 基本的な注文情報(注文ID、顧客、注文時刻)
  • order_items - 注文内容(ピザ、サイド、ドリンク)
  • kitchen_queue - キッチンへの投入と完了時刻
  • delivery_assignments - ドライバーの割り当てと配達の追跡
  • payments - 決済の処理記録

目標は、注文受付から配達完了までの流れを1つの event log にまとめて見える化することです。

Event の種類: 直接取得と推定

event log を作る際には、大きく2種類の event があります。

直接イベント

直接イベントはシステムに明示的に記録されます。ユーザーのクリックやシステムの自動記録により、タイムスタンプがそのままデータベースに保存されます。

Pizza Palace の例:

  • Order placed(orders テーブルのタイムスタンプ)
  • Payment received(payments テーブルのタイムスタンプ)
  • Delivery completed(delivery_assignments テーブルのタイムスタンプ)

推定イベント(Inferred Events)

推定イベントには固有のタイムスタンプはありませんが、他のデータを手がかりに発生時点を推測できます。

Pizza Palaceの例:

  • “Order Assigned to Driver” にはタイムスタンプがない場合がありますが、delivery_assignments テーブルの created_at から割り当て時刻がわかります
  • ”Pizza Ready” は、キッチンのキューのステータスが “completed” に変わった時点から推定できます

大きな違い: 直接イベントは明示的に記録されますが、推定イベントは他のデータを解釈して導きます。どちらもプロセスマイニングで有用です。

Event log の設計

データを抽出する前に、どの event を記録するかを設計しましょう。Pizza Palace では次のアクティビティを追跡します。

  1. 注文受付 - 顧客が注文を送信
  2. 入金完了 - 決済処理が成功
  3. キッチンへ送信 - 調理キューに投入
  4. 調理完了 - キッチンが完了に更新
  5. ドライバー割り当て - 配達担当を割り当て
  6. 配達完了 - 顧客への配達完了

各 event について以下を特定します。

  • どのテーブルにデータがあるか
  • どのフィールドが timestamp か
  • Case ID は何か(この例では注文ID)

対応関係は次のとおりです。

アクティビティソーステーブルTimestamp フィールドCase ID フィールド
注文受付orderscreated_atid
入金完了paymentspayment_timeorder_id
キッチンへ送信kitchen_queuequeue_entry_timeorder_id
調理完了kitchen_queuecompleted_timeorder_id
ドライバー割り当てdelivery_assignmentsassigned_atorder_id
配達完了delivery_assignmentsdelivered_atorder_id

Case と Event の属性を追加する

Case ID、Timestamp、Activity は必須ですが、属性を加えると分析がぐっと強力になります。属性は、背景情報を与える追加カラムです。

ケース属性

ケース(注文)全体を表す属性で、同じケース内のすべてのイベントで共通です:

  • 顧客名
  • 注文総額
  • 配送先住所
  • 注文点数

イベント属性

イベントごとに固有の属性です:

  • ドライバー名(配送系のイベントのみ)
  • 支払い方法(支払い系のイベントのみ)
  • キッチンステーション(キッチン系のイベントのみ)

コツ: 適用されない属性があっても、全行に同じ列を持たせて構いません。例えば「Order Placed」の行に「Driver Name」列があっても空でOKです。シンプルなフラットなテーブル形式を保てるため、プロセスマイニングツールとの相性が良くなります。

Event log の作り方: シンプルな構造

最終的な event log は、1行が1つの event を表す、単一のテーブルにします。Pizza Palace の event log は次のようになります。

Case IDTimestampActivity顧客注文金額ドライバー支払方法
10012025-01-15 18:30:00注文受付John Smith45.99
10012025-01-15 18:30:15入金完了John Smith45.99クレジットカード
10012025-01-15 18:31:00キッチンへ送信John Smith45.99
10012025-01-15 18:45:00調理完了John Smith45.99
10012025-01-15 18:46:00ドライバー割り当てJohn Smith45.99Maria Garcia
10012025-01-15 19:05:00配達完了John Smith45.99Maria Garcia
10022025-01-15 18:35:00注文受付Jane Doe28.50
10022025-01-15 18:35:20入金完了Jane Doe28.50PayPal

同じ Case 内では、Case 属性(例:顧客、注文金額)が event ごとに繰り返されます。この重複は意図的なもので、後の加工や分析をぐっと楽にします。

方法1: Excel で event log を作る

データをスプレッドシートにエクスポートできるなら、手作業で event log を作成できます。小規模データや学習用途に最適です。

ステップ1:イベントタイプごとに別シートへエクスポート

アクティビティごとにワークシートを1枚作成します。

シート1:Order Placed

Case IDTimestampActivityCustomerOrder Value
10012025-01-15 18:30:00Order PlacedJohn Smith45.99
10022025-01-15 18:35:00Order PlacedJane Doe28.50

シート2:Payment Received

Case IDTimestampActivityCustomerOrder ValuePayment Method
10012025-01-15 18:30:15Payment ReceivedJohn Smith45.99Credit Card
10022025-01-15 18:35:20Payment ReceivedJane Doe28.50PayPal

ステップ2:列を標準化する

すべてのシートで同じ列を同じ順序に揃えます。必要なら空の列を追加します。

シート1:Order Placed(更新)

Case IDTimestampActivityCustomerOrder ValueDriverPayment Method
10012025-01-15 18:30:00Order PlacedJohn Smith45.99

ステップ3:全シートを結合

新しい「Event Log」シートを作成し、各アクティビティのシートから行を順にすべて貼り付けて1つにまとめます。

ステップ4:Case ID、次にTimestampで並べ替え

全データを選択し、次の順でソートします。

  1. Case ID(昇順)
  2. Timestamp(昇順)

各ケース内で時系列が整い、各注文の流れを追いやすくなります。

ステップ5:CSVにエクスポート

結合したシートをCSVで保存します。ほとんどのプロセスマイニングツールで利用できます。

Excelのコツ:

  • VLOOKUPやXLOOKUPで、注文シートから顧客名などのケース属性を取り込む
  • 日付時刻の形式は一貫させる(YYYY-MM-DD HH:MM:SS が扱いやすい)
  • エクスポート前に重複イベントを削除する

方法2: SQL で event log を作る

大規模データや定期的な抽出には、SQL のほうが効率的で再現性も高いです。ポイントは、UNION ALL を使って複数のクエリ結果を1つの結果セットに結合することです。

UNION ALLを理解する

UNION ALLは、複数のSELECT文の結果を縦に積み重ねて1つの結果セットにします。すべてのSELECTで列数をそろえ、互換性のあるデータ型にしておく必要があります。

完全な SQL サンプル

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;

このクエリを拡張するには

イベントを追加する手順:

  1. 既存の SELECT ブロックをコピーして雛形にする
  2. テーブル名を変更して参照元を差し替える
  3. タイムスタンプの列を正しいカラムに更新する
  4. アクティビティ名をイベント内容に合わせて変更する
  5. 属性列を必要に応じて調整する
  6. WHERE 条件を加えてデータを適切に絞り込む

例えば「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'

Event log 作成のベストプラクティス

1. まずはシンプルに。複雑さはあとから

まずは必須の3列と、主要なアクティビティだけで十分です。基本の event log を作ってツールに読み込めたら、必要に応じて event や属性を段階的に追加していきましょう。

2. データを検証する

分析に入る前に、イベントログで起こりがちな問題を確認しましょう:

  • タイムスタンプの欠落 - タイムスタンプのないイベントではプロセスマイニングが成り立ちません
  • 重複イベント - 同じイベントが二重に記録されると結果が歪みます
  • 順序の乱れ - 「Order Ready」が「Order Placed」より前にあるのはデータ品質の問題です
  • 孤立イベント - 他のアクティビティに現れないケースIDのイベント

3. 抽出内容をドキュメント化する

次を記録しておきましょう:

  • 使用したテーブル
  • 適用したフィルター
  • 抽出を実行した日時
  • 前提や仮定

この記録は、後からイベントログを更新したりトラブルシューティングしたりする際にとても役立ちます。

4. 命名を一貫させる

アクティビティ名は抽出のたびにブレないように保ちましょう:

  • 「Order Placed」と決めたなら、「Order Created」や「New Order」と混在させない
  • 命名規則を決め、チームで徹底しましょう

5. タイムゾーンをそろえる

複数のシステムや地域からデータを集める場合は、すべてのタイムスタンプを同じタイムゾーンに統一してください。整合性重視なら UTC に統一するのが無難です。

よくあるつまずきと対処法

課題:同じイベントが複数ソースに存在する

同一のイベントが複数のテーブルに記録されることがあります。たとえば、出荷時刻を注文システムと ERP の両方が記録している場合です。

解決策: 信頼できる唯一の情報源(source of truth)をひとつ決め、それだけを使います。選定理由は必ずドキュメント化しておきましょう。

Process Mining の event log 作成における代表的な課題の図解

課題:タイムスタンプのないイベント

一部のイベントには独自のタイムスタンプがないことがあります。例えば「Order Approved」が boolean のフラグでしか持たれていないケースです。

解決策: 関連するタイムスタンプを探しましょう。たとえば approved_at フィールドがあるか、フラグ変更時の modified_at を使う方法があります。

課題:イベント件数が非常に多い

数百万件規模のイベントがあると、抽出時のクエリが遅くなったり落ちたりすることがあります。

解決策:

  • 期間を絞る日付フィルターを入れる
  • 月次などのバッチに分けて抽出し、あとでファイルを結合する
  • 大規模抽出には専用の ETL ツールの利用も検討する

次の一歩: event log を Process Mining ツールに読み込む

CSV やデータベースのエクスポートとして event log を用意できたら、Process Mining ツールに読み込みましょう。一般的な手順はどこもほぼ同じです。

  1. ファイルをアップロードする、または抽出データとツールを接続する
  2. カラムのマッピング(Case ID / Timestamp / Activity)
  3. 追加の属性を設定
  4. プロセスマップを生成

ProcessMind のような最新ツールなら操作は簡単。event log をアップロードするだけでプロセスが自動で可視化され、ボトルネックやばらつき、改善の着眼点が浮かび上がります。

まとめ

Process Mining の event log を作るのに、特別なツールや高度な技術は不要です。本質はシンプルです。Case ID・Timestamp・Activity の3列にデータを整理するだけ。

小規模なら Excel、大規模や定期抽出なら SQL。どちらでも基本は同じです。

  1. 追跡したい event を決める
  2. 各 event の timestamp を見つける
  3. すべてを1つのテーブルにまとめる
  4. 属性を追加して分析を豊かにする

一番難しいのは抽出そのものではなく、「どの event が重要か」を理解すること。まずは明らかな event(例:注文受付、配達完了)から始め、ツールで得られる洞察に合わせて少しずつ詳細を足していきましょう。

もっと深掘りするなら、継続的な業務改善のページをご覧ください。購買から支払(Purchase to Pay)受注から入金(Order to Cash)買掛金管理(Accounts Payable)など、主要プロセスのアクティビティとデータ要件を詳しく解説しています。SAP、Oracle、Microsoft Dynamics などのテンプレートも用意しており、event log 作成にスムーズに着手できます。

今日から始めよう

完璧な event log を待つ必要はありません。まずは手元のデータで作り、得られたプロセスマップから学び、繰り返し改善しましょう。基本的なアクティビティだけでも、実態を映す意外な気づきが得られます。

関連記事

Process Miningやワークフロー最適化の専門インサイトをメールで受け取る
プロセス分析の始め方:Process Miningで洞察を得る実践ガイド

プロセス分析の始め方:Process Miningで洞察を得る実践ガイド

Process Mining のダッシュボードを、現場で使える示唆に変える。データの理解、パターン探索、真の改善機会の見つけ方を段階的に学べます。

なぜ市販コネクタを使わないのか—私たちの代替策

なぜ市販コネクタを使わないのか—私たちの代替策

市販のコネクタは簡単なデータ抽出を約束しますが、現場では複雑化・遅延・ベンダーロックインを招きがち。私たちはデータテンプレートでシンプルに始めます。

データ活用で実現するプロセス改善戦略ガイド

データ活用で実現するプロセス改善戦略ガイド

データを活用したビジネスプロセス改善と変革をわかりやすく解説。

Celonis代替Process Mining徹底比較|ProcessMindが賢い選択

Celonis代替Process Mining徹底比較|ProcessMindが賢い選択

2025年版CelonisとProcessMindを比較。最適なプロセスマイニングSaaSと料金・機能を紹介。

30日以内にプロセス改善を実現するチャレンジに挑戦しよう!

すぐアクセスでき、クレジットカード不要、待ち時間なし。MAP・MINE・シミュレーションが連携し、より速く賢い意思決定を体験できます。

全機能を使い、深いインサイトを発見し、初日から業務を効率化。

今すぐ無料トライアルでProcess Intelligenceの全機能を活用し、30日以内に本当の改善を実感!