プロセスマイニングのイベントログを作成する方法

学べること

このガイドでは、プロセスマイニングのイベントログをゼロから作成する方法を説明します。すべてのイベントログに必要な3つの必須列を確認し、実際の業務を想定した例を見ながら、ExcelとSQLの両方で最初のイベントログを作成する方法を紹介します。

プロセスマイニングのイベントログとは

関連情報:プロセス改善について詳しく知り、システム用のデータテンプレートを確認してください。また、シンプルなデータテンプレートを優先し、標準コネクターを使わない理由については、標準コネクターを使わない理由をご覧ください。

プロセスマイニングのイベントログは、業務プロセスで起きたことを記録する表です。ケースがシステム内を進む際の各ステップを追跡します。プロセスマイニングソフトウェアは、このデータを使って、プロセスが実際にどのように動いているかを示します。

すべてのイベントログには、次の3つの必須列が必要です。

意味
ケースID 関連するイベントをまとめる一意の識別子 注文 #12345
タイムスタンプ イベントが発生した日時 2025-01-15 09:30:00
アクティビティ 発生した内容 “注文を登録”

これだけです。この3列があれば、プロセスマイニングを始められます。顧客名、注文金額、従業員IDなど、それ以外の項目は任意です。こうした追加項目を「属性」と呼び、分析に背景情報を加えます。

イベントとアクティビティの違いを理解する

先に進む前に、よくある混同を整理しておきます。

アクティビティは、「注文発送」や「支払い受領」のような行動の種類です。分類やラベルと考えると分かりやすいでしょう。

イベントは、そのアクティビティが具体的に発生したことを指します。注文#12345が1月15日午後2時30分に発送された場合、それがイベントです。

イベントログにはイベントが含まれ、各イベントにはアクティビティ名があります。実際には、これらの用語を同じ意味で使うことも多く、それ自体は問題ありません。アクティビティは「何を」を表し、イベントは「いつ、誰に起きたか」を表すと覚えておきます。

例:Pizza Palaceの注文システム

このガイドを実践的な内容にするため、架空のシステムを使います。オンライン注文システムを運営する地域のピザ店、Pizza Palaceを想像してください。顧客はウェブサイトから注文し、スタッフがピザを調理し、配達員が届けます。

Pizza Palaceのシステムには、注文プロセスのさまざまな部分を追跡するデータベーステーブルがあります。

  • orders:基本的な注文情報(注文ID、顧客、注文時刻)
  • order_items:注文内容(ピザ、サイドメニュー、飲み物)
  • kitchen_queue:注文が厨房に入った時刻と出た時刻
  • delivery_assignments:配達員の割り当てと配達状況
  • payments:支払い処理の記録

目的は、注文受付から配達まで、各注文の一連の流れを示すイベントログを作成することです。

イベントの種類:直接イベントと推定イベント

イベントログを作成すると、次の2種類のイベントを扱うことになります:

直接イベント

直接イベントは、システムに明示的に記録されます。誰かがボタンをクリックした、またはシステムが操作を記録した場合、データベースにはその時刻のタイムスタンプが保存されています。

Pizza Palaceの例:

  • 注文受付(ordersテーブルのタイムスタンプ)
  • 支払い受領(paymentsテーブルのタイムスタンプ)
  • 配達完了(delivery_assignmentsテーブルのタイムスタンプ)

推定イベント

推定イベントには固有のタイムスタンプがありませんが、ほかのデータから発生時刻を判断できます。

Pizza Palaceの例:

  • 「ドライバーへの注文割り当て」には固有のタイムスタンプがない場合があります。ただし、delivery_assignmentsテーブルのcreated_atフィールドから、割り当てが行われた時刻を確認できます
  • 「ピザの準備完了」は、キューのステータスが「completed」に変わった時刻から推定できます

直接イベントは明示的に記録される一方、推定イベントではほかのデータ項目を解釈する必要があります。どちらもプロセスマイニングで有効に利用できます。

イベントログを計画する

データを抽出する前に、どのイベントを記録するかを決めます。Pizza Palaceでは、次のアクティビティを追跡します:

  1. 注文受付:顧客が注文を送信する
  2. 支払い受領:支払いが正常に処理される
  3. キッチンへ注文送信:注文が調理待ちキューに入る
  4. 注文準備完了:キッチンが注文を完了として処理する
  5. ドライバーへの割り当て:配達担当のドライバーが割り当てられる
  6. 配達完了:注文が顧客に届けられる

各イベントについて、次の項目を特定します:

  • データが格納されているテーブル
  • タイムスタンプを提供するフィールド
  • Case ID(ここでは注文ID)

次のように対応付けます:

アクティビティ ソーステーブル タイムスタンプフィールド 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属性とイベント属性を追加する

Case ID、Timestamp、Activityは必須です。属性を追加の列として加えると、分析に文脈が生まれ、より有用な結果を得られます。

Case属性

Case属性はケース全体、つまり注文について説明する項目です。同じケースに含まれるすべてのイベントで値が変わりません:

  • 顧客名
  • 注文金額
  • 配達先住所
  • 注文した商品の数

イベント属性

イベント属性は個々のイベントに適用されます:

  • ドライバー名(配達イベントにのみ関連)
  • 支払い方法(支払いイベントにのみ関連)
  • キッチンの担当ステーション(キッチンイベントにのみ関連)

**ポイント:**特定のイベントに該当しない属性であっても、すべての行に含めて問題ありません。たとえば、「注文受付」の行に空の「ドライバー名」列を含める方法です。こうすると、イベントログをシンプルなフラットテーブル形式で保てるため、プロセスマイニングツールで扱いやすくなります。

イベントログを作成する:基本構造

完成したイベントログは、1行につき1イベントを記録した単一のテーブルにします。Pizza Palaceのイベントログは次のようになります:

Case ID Timestamp Activity Customer Order Value Driver Payment Method
1001 2025-01-15 18:30:00 注文受付 John Smith 45.99
1001 2025-01-15 18:30:15 支払い受領 John Smith 45.99 Credit Card
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

CustomerやOrder ValueなどのCase属性は、同じケースのすべてのイベントで繰り返されます。この重複は意図的なもので、データを扱いやすくするためのものです。

方法1:Excelでイベントログを作成する

データをスプレッドシートにエクスポートできる場合は、イベントログを手作業で作成できます。小規模なデータセットに適しており、基本を学ぶのにも役立ちます。

ステップ1:イベントの種類ごとに別のシートへエクスポートする

アクティビティの種類ごとにワークシートを1つ作成します:

シート1:注文受付

Case ID Timestamp Activity Customer Order Value
1001 2025-01-15 18:30:00 注文受付 John Smith 45.99
1002 2025-01-15 18:35:00 注文受付 Jane Doe 28.50

シート2:支払い受領

Case ID Timestamp Activity Customer Order Value Payment Method
1001 2025-01-15 18:30:15 支払い受領 John Smith 45.99 Credit Card
1002 2025-01-15 18:35:20 支払い受領 Jane Doe 28.50 PayPal

ステップ2:列を統一する

すべてのシートで、列の構成と順序を揃えます。必要に応じて空の列を追加します:

シート1:注文受付(更新後)

Case ID Timestamp Activity Customer Order Value Driver Payment Method
1001 2025-01-15 18:30:00 注文受付 John Smith 45.99

ステップ3:すべてのシートを結合する

新しい「イベントログ」シートを作成します。各アクティビティシートのすべての行をコピーし、結合後のシートに順番に貼り付けます。

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

すべてのデータを選択し、次の順序で並べ替えます:

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

これにより、各ケース内のイベントが時系列に並び、注文ごとの進行を追跡できます。

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

結合したシートをCSVファイルとして保存します。この形式は、ほぼすべてのプロセスマイニングツールで利用できます。

Excelのヒント:

  • VLOOKUPまたはXLOOKUPを使い、注文シートから顧客名などのCase属性を取得します
  • 日付形式を統一します(YYYY-MM-DD HH:MM:SSが最適です)
  • エクスポート前に重複イベントを削除します

方法2:SQLでイベントログを作成する

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

UNION ALLを理解する

UNION ALLは、複数のSELECT文の結果を積み重ねます。各SELECTが最終結果に行を追加します。すべての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ブロックを1つコピーし、テンプレートとして使います
  2. テーブル名を変更し、ソーステーブルを指定します
  3. タイムスタンプフィールドを更新し、正しい列を指定します
  4. アクティビティ名を変更し、イベントの内容を表します
  5. 属性を必要に応じて調整します
  6. 適切なWHERE条件を追加し、データを絞り込みます

たとえば、「配達試行」イベントを追加する場合は、次のようにします:

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'

イベントログ作成のベストプラクティス

1. まずはシンプルに始め、後から複雑さを加える

必須の3列と、いくつかの主要なアクティビティから始めます。基本的なイベントログを作成してプロセスマイニングツールに読み込んだ後で、イベントや属性を追加できます。

2. データを検証する

分析を始める前に、イベントログに次のような一般的な問題がないか確認します:

  • タイムスタンプの欠落:タイムスタンプのないイベントがあると、プロセスマイニングが正しく機能しません
  • 重複イベント:同じイベントを2回記録すると、結果に偏りが生じます
  • 順序が逆のイベント:「注文受付」より前に「注文準備完了」がある場合は、データ品質に問題があります
  • 孤立イベント:ほかのアクティビティに存在しないCase IDを持つイベントです

3. 抽出内容を文書化する

次の項目を記録します:

  • 使用したテーブルと監査証跡
  • 適用したフィルター
  • 抽出を実行した日時
  • 設定した前提条件

この文書は、後からイベントログを更新したり、問題を調査したりする際に役立ちます。

4. 命名規則を統一する

抽出ごとにアクティビティ名を統一します:

  • 抽出によって「Order Created」や「New Order」と使い分けるより、「Order Placed」に統一するほうが適切です
  • 命名規則を決めたら、継続して守ります

5. タイムゾーンを扱う

複数のシステムや地域のデータを扱う場合は、すべてのタイムスタンプで同じタイムゾーンを使うようにします。一貫性を保つには、UTCが安全な選択肢になることが多いです。

よくある課題と解決策

プロセスマイニングのイベントログ作成でよくある課題のイラスト

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

イベントによっては、固有のタイムスタンプがない場合があります。たとえば、「注文承認」イベントがBooleanフラグだけで表されているケースです。

**解決策:**関連するタイムスタンプを探します。「approved_at」フィールドが見つかる場合もあれば、承認フラグが変更された時点の「modified_at」タイムスタンプを使える場合もあります。

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

数百万件のイベントがある場合、抽出クエリの実行に時間がかかったり、失敗したりすることがあります。

解決策:

  • 日付フィルターを追加して抽出期間を絞ります
  • 1か月ずつバッチで抽出し、後からファイルを結合します
  • 大規模な抽出には専用のETLツールの利用を検討します

次のステップ:イベントログをプロセスマイニングツールに読み込む

イベントログをCSVファイルまたはデータベースのエクスポートとして作成したら、プロセスマイニングツールに読み込む準備は完了です。多くのツールでは、次のような手順で進めます:

  1. ファイルをアップロードするか、プロセスマイニングツールを抽出済みのデータに接続します。
  2. 列(Case ID、Timestamp、Activity)を対応付けます
  3. 追加の属性を設定します
  4. プロセスマップを生成します

ProcessMindのような最新のプロセスマイニングツールを使えば、この作業をスムーズに進められます。イベントログのデータをアップロードすると、ツールがプロセスを自動で可視化し、ボトルネック、ばらつき、改善の機会を明らかにします。これにより、コスト削減や業務プロセスの最適化につなげられます。

まとめ

プロセスマイニングのイベントログを作成するために、専門ツールや高度な技術知識は必ずしも必要ありません。基本的には、プロセスマイニングのデータを、3つの必須列であるCase ID、Timestamp、Activityを持つテーブルに整理します。

小規模なデータセットにはExcelを、大規模で複雑な抽出にはSQLを使う場合でも、基本的な考え方は同じです:

  1. 追跡するイベントを特定する
  2. 各イベントのタイムスタンプを見つける
  3. すべてを1つのテーブルにまとめる
  4. 属性を追加して分析に情報を加える

最も難しいのは、技術的な抽出作業ではありません。どのイベントが重要かを判断できるほど、自社の業務を理解することです。まずは注文受付や注文完了など、明確なイベントから始め、プロセスマイニングツールで得られる結果を見ながら詳細を追加します。

さらに詳しく知りたい場合は、継続的なプロセス改善のページをご覧ください。調達から支払いまで受注から入金まで買掛金管理など、主要なプロセスにおけるアクティビティとデータ要件を詳しく説明しています。SAP、Oracle、Microsoft Dynamicsなどの主要システム向けのデータテンプレートも掲載しているため、イベントログの作成を始めやすくなります。

今日から始める

完璧なイベントログを待つ必要はありません。手元にあるデータから始め、作成したプロセスマップから学び、改善を重ねます。基本的なアクティビティだけのシンプルなイベントログでも、実際のプロセスがどのように動いているかを示す有用な情報を得られます。

関連するブログ記事

プロセスマイニングとワークフロー最適化に関する専門家のインサイトを受信トレイで受け取ります。
プロセスのボトルネック分析:実践ガイド

プロセスのボトルネック分析:実践ガイド

プロセスのボトルネック分析によって、プロセスマイニングのデータを業務改善の機会につなげる方法を学べます。パターンを調べ、ボトルネックを特定し、パフォーマンスを改善する方法をご紹介します。

標準コネクタを採用しない理由

標準コネクタを採用しない理由

プロセスマイニングのコネクタは、複雑さや遅延、ベンダーロックインを招くことがあります。データテンプレートによって、プロセスマイニングのデータ準備をシンプルにする方法をご紹介します。

リーンプロセス改善:データに基づくガイド

リーンプロセス改善:データに基づくガイド

DMAICプロセス、シックスシグマプロセス、リーンプロセス改善の手法を学び、測定可能な業務成果につなげます。

Celonisの代替製品:プロセスマイニングツールを比較

Celonisの代替製品:プロセスマイニングツールを比較

CelonisのプロセスマイニングとProcessMindを比較し、プロセス、予算、目的に合うソフトウェアを見つけます。

より良いプロセスを設計します。つながるアーキテクチャを構築します。管理を行き届かせます。

クレジットカード不要、待ち時間なしですぐに利用を開始できます。組織の業務の進め方を、明確でつながりのあるプロセス設計に変えます。

プロセスアーキテクチャを構築し、所有者と管理項目を定義して、あらゆる階層で役割と責任をそろえます。

無料トライアルを開始し、プロセスのガバナンス、管理、継続的改善を支える信頼できる基盤を1つ構築します。