{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Conformance Checking\n", "*by: Sebastiaan J. van Zelst*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "In this tutorial, we'll be focusing on *conformance checking*.\n", "The conceptual idea of conformance checking is rather easy, i.e., computing to what degree a given process model conforms to the exeuction of a process, as recorded by the event data.\n", "We are going to use the same process model as we have seen before, i.e., based on our [running example event log](data/running_example.csv):" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "![Running example BPMN-based process model describing the behavior of the simple process that we use in this tutorial](img/bpmn_running_example.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "However, to check conformance w.r.t. the model, we're going to use a slightly [different event log](data/running_example_broken.csv).\n", "In this tutorial, we'll consider two types of techniques, i.e., *token-based-replay*, and, *alignments*.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Token-Based-Replay" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "In order to understand token-based-replay, we first need to cover a bit of Petri net theory.\n", "Let's use the Petri net based on the clean [running example event log](data/running_example.csv), as an example." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import pm4py\n", "df = pm4py.format_dataframe(pd.read_csv('data/running_example.csv', sep=';'), case_id='case_id',activity_key='activity',\n", " timestamp_key='timestamp')\n", "pn, im, fm = pm4py.discover_petri_net_inductive(df)\n", "pm4py.view_petri_net(pn, im, fm)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Places and Transitions\n", "Observe that the Petri net consists of two different type of nodes, i.e., cirlces and rectangles.\n", "We refer to the circles as *places* and we refer to the rectangles as *transitions*.\n", "Furthermore, notice that, a place can only be connected (by means of an arc) to a transition.\n", "Similarly, a transition can only be connected (by means of an arc) to a place.\n", "Hence, *places never connect directly to places* and *transitions never connect directly to transitions*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Tokens, Enabledness and Transition Firing\n", "There is one place in the model containing a black 'dot'.\n", "This dot is referred to as a *token*.\n", "For convienence, let's call the place containing the token 'source'.\n", "A transition can consume and produce tokens, referred to as *firing a transition*.\n", "A transition is allowed to fire, if all of its 'incoming places' contain at least one token.\n", "Any transition for which this property holds is referred to as an *enabled transition*.\n", "In the example net, only the 'source' place contains a token.\n", "Consequently, the only transition that has a token in all of its 'incoming places' is the transition *register request*, i.e., it is enabled.\n", "If we diced to fire the an enabled transition, it consumes one token from each of its 'incoming places' and it produces a token in each of its 'outgoing places'.\n", "For example, if we *fire* the *register request* transition, it consumes the token in the source place and it produces a fresh token in its outgoing place (i.e., the place connected to it by means of an outgoing arc).\n", "\n", "*It is extremely important to note that there is no relationship between token production and consumption, i.e., tokens that are consumed cease to exist, tokens that are produced are always \"fresh tokens\"*.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Token-Based-Replay - The Basics\n", "When we use token-based-based-replay, we are effecitvely mimicking behavior observed in the event log in the context of a given process model.\n", "\n", "Let's assume that in the event log, we observe the trace: \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "$\\langle \\text{register request, examine casually, check ticket, decide, reject request} \\rangle$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "The token-based replay algorithm will simply mimick the trace in the model and keep track of the number of tokens we need to produce, respectively consume to *replay* the trace in the model.\n", "For example, the first activity in the trace, i.e., *register request*, can be directly mimicked by consuming the token in the source place.\n", "To subsequently fire the *examine causally* activity, we need the token produced by firing the *register request* transition.\n", "The token needs to be consumed by the *black* transition (this is referred to as an invisible transition) that connects to the output place of the *register request* transition.\n", "Said transition will produce two fresh tokens (observe that it has two outgoing places), one of which can subsequently be consumed by the *examine casually* transition.\n", "Essentially, the token-based-replay algorithm keeps repeating this rationale, until it has mimicked the complete trace.\n", "\n", "In the previous example, the trace can be completely mimicked (or *replayed*) by the model.\n", "However, consider the trace:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "$\\langle \\text{register request, examine casually, check ticket, reject request} \\rangle$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "When analyzing the trace, we observe that a decision is missing.\n", "The token-based-replay algorithm can detect this, i.e., it can detect that due to the lack of the *decide* transition in the trace, when mimicking it, tokens would remain in the input places of the *decide* transition, and, similarly, tokens would be missing in the input place of the *reject request* transition.\n", "\n", "For a given event log, the token-based-replay algorithm simply mimicks every trace in the event log, and, keeps track of the number of detected problems (missing and remaining tokens when mimicking the bahvior).\n", "It subsequently compares the dected number of problems with the total amount of 'correct behavior' and produces a 'conformity score' (often referred to as a 'fitness' score) between $0$ and $1$.\n", "If the score is $1$, no problems were detected.\n", "If the score is $0$, no normal behavior was detected." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "### Token-Based-Replay in pm4py" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "jupyter": { "outputs_hidden": false }, "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "application/json": { "ascii": false, "bar_format": null, "colour": null, "elapsed": 0.00988912582397461, "initial": 0, "n": 0, "ncols": null, "nrows": 15, "postfix": null, "prefix": "replaying log with TBR, completed variants :: ", "rate": null, "total": 6, "unit": "it", "unit_divisor": 1000, "unit_scale": false }, "application/vnd.jupyter.widget-view+json": { "model_id": "fa4996a01e5c444896cb5920ac3f460b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "replaying log with TBR, completed variants :: 0%| | 0/6 [00:00>', 'register request'),\n", " ('>>', None),\n", " ('examine thoroughly', 'examine thoroughly'),\n", " ('check ticket', 'check ticket'),\n", " ('decide', 'decide'),\n", " ('>>', None),\n", " ('reject request', 'reject request')],\n", " 'cost': 10002,\n", " 'visited_states': 7,\n", " 'queued_states': 22,\n", " 'traversed_arcs': 22,\n", " 'lp_solved': 1,\n", " 'fitness': 0.8888888888888888,\n", " 'bwc': 90002},\n", " {'alignment': [('register request', 'register request'),\n", " ('>>', None),\n", " ('check ticket', 'check ticket'),\n", " ('examine casually', 'examine casually'),\n", " ('>>', 'decide'),\n", " ('>>', None),\n", " ('pay compensation', 'pay compensation')],\n", " 'cost': 10002,\n", " 'visited_states': 7,\n", " 'queued_states': 23,\n", " 'traversed_arcs': 23,\n", " 'lp_solved': 2,\n", " 'fitness': 0.8888888888888888,\n", " 'bwc': 90002},\n", " {'alignment': [('register request', 'register request'),\n", " ('>>', None),\n", " ('>>', 'examine casually'),\n", " ('check ticket', 'check ticket'),\n", " ('decide', 'decide'),\n", " ('reinitiate request', '>>'),\n", " ('>>', None),\n", " ('pay compensation', 'pay compensation')],\n", " 'cost': 20002,\n", " 'visited_states': 8,\n", " 'queued_states': 27,\n", " 'traversed_arcs': 27,\n", " 'lp_solved': 5,\n", " 'fitness': 0.8,\n", " 'bwc': 100002},\n", " {'alignment': [('register request', 'register request'),\n", " ('>>', None),\n", " ('check ticket', 'check ticket'),\n", " ('examine thoroughly', 'examine thoroughly'),\n", " ('decide', 'decide'),\n", " ('>>', None),\n", " ('reject request', 'reject request')],\n", " 'cost': 2,\n", " 'visited_states': 7,\n", " 'queued_states': 24,\n", " 'traversed_arcs': 24,\n", " 'lp_solved': 1,\n", " 'fitness': 1.0,\n", " 'bwc': 100002},\n", " {'alignment': [('register request', 'register request'),\n", " ('>>', None),\n", " ('examine casually', 'examine casually'),\n", " ('check ticket', 'check ticket'),\n", " ('decide', 'decide'),\n", " ('reinitiate the request for real', '>>'),\n", " ('>>', 'reinitiate request'),\n", " ('>>', None),\n", " ('check ticket', 'check ticket'),\n", " ('examine casually', 'examine casually'),\n", " ('decide', 'decide'),\n", " ('>>', 'reinitiate request'),\n", " ('>>', None),\n", " ('examine casually', 'examine casually'),\n", " ('check ticket', 'check ticket'),\n", " ('decide', 'decide'),\n", " ('>>', None),\n", " ('reject request', 'reject request')],\n", " 'cost': 30004,\n", " 'visited_states': 18,\n", " 'queued_states': 59,\n", " 'traversed_arcs': 59,\n", " 'lp_solved': 19,\n", " 'fitness': 0.8235294117647058,\n", " 'bwc': 170002},\n", " {'alignment': [('register request', 'register request'),\n", " ('>>', None),\n", " ('>>', 'examine casually'),\n", " ('check ticket', 'check ticket'),\n", " ('>>', 'decide'),\n", " ('decide something', '>>'),\n", " ('>>', None),\n", " ('pay compensation', 'pay compensation')],\n", " 'cost': 30002,\n", " 'visited_states': 8,\n", " 'queued_states': 25,\n", " 'traversed_arcs': 25,\n", " 'lp_solved': 2,\n", " 'fitness': 0.6666666666666667,\n", " 'bwc': 90002}]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pn, im, fm = pm4py.discover_petri_net_inductive(df)\n", "pm4py.conformance_diagnostics_alignments(df_problems, pn, im, fm)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "Like token-based-replay, alignments can also be used to quantify 'fitness':" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "application/json": { "ascii": false, "bar_format": null, "colour": null, "elapsed": 0.011507749557495117, "initial": 0, "n": 0, "ncols": null, "nrows": 15, "postfix": null, "prefix": "aligning log, completed variants :: ", "rate": null, "total": 6, "unit": "it", "unit_divisor": 1000, "unit_scale": false }, "application/vnd.jupyter.widget-view+json": { "model_id": "85b88bb2093547bcb6586352566c96a0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "aligning log, completed variants :: 0%| | 0/6 [00:00