<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Discovery of Frequent Episodes in Event Logs</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Maikel Leemans</string-name>
          <email>m.leemans@tue.nl</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Wil M.P. van der Aalst</string-name>
          <email>w.m.p.v.d.aalst@tue.nl</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Eindhoven University of Technology</institution>
          ,
          <addr-line>P.O. Box 513, 5600 MB, Eindhoven</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Lion's share of process mining research focuses on the discovery of end-to-end process models describing the characteristic behavior of observed cases. The notion of a process instance (i.e., the case) plays an important role in process mining. Pattern mining techniques (such as frequent itemset mining, association rule learning, sequence mining, and traditional episode mining) do not consider process instances. An episode is a collection of partially ordered events. In this paper, we present a new technique (and corresponding implementation) that discovers frequently occurring episodes in event logs thereby exploiting the fact that events are associated with cases. Hence, the work can be positioned in-between process mining and pattern mining. Episode discovery has its applications in, amongst others, discovering local patterns in complex processes and conformance checking based on partial orders. We also discover episode rules to predict behavior and discover correlated behaviors in processes. We have developed a ProM plug-in that exploits e cient algorithms for the discovery of frequent episodes and episode rules. Experimental results based on real-life event logs demonstrate the feasibility and usefulness of the approach.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Process mining provides a powerful way to analyze operational processes based on
event data. Unlike classical purely model-based approaches (e.g., simulation and
veri cation), process mining is driven by \raw" observed behavior instead of
assumptions or aggregate data. Unlike classical data-driven approaches, process mining is
truly process-oriented and relates events to high-level end-to-end process models [1].</p>
      <p>In this paper, we use ideas inspired by episode mining [2] and apply these to the
discovery of partially ordered sets of activities in event logs. Event logs serve as the starting
point for process mining. An event log can be viewed as a multiset of traces [1]. Each
trace describes the life-cycle of a particular case (i.e., a process instance) in terms of the
activities executed. Often event logs store additional information about events, e.g.,
the resource (i.e., person or device) executing or initiating the activity, the timestamp
of the event, or data elements (e.g., cost or involved products) recorded with the event.</p>
      <p>Each trace in the event log describes the life-cycle of a case from start to completion.
Hence, process discovery techniques aim to transform these event logs into end-to-end
process models. Often the overall end-to-end process model is rather complicated
because of the variability of real life processes. This results in \Spaghetti-like" diagrams.
Therefore, it is interesting to also search for more local patterns in the event log { using
episode discovery { while still exploiting the notion of process instances. Another useful
application of episode discovery is conformance checking based on partial orders [3].</p>
      <p>Since the seminal papers related to the Apriori algorithm [4, 5, 6], many pattern
mining techniques have been proposed. These techniques do not consider the ordering
of events [4] or assume an unbounded stream of events [5, 6] without considering
process instances. Mannila et al. [2] proposed an extension of sequence mining [5, 6]
allowing for partially ordered events. An episode is a partially ordered set of activities
and it is frequent if it is \embedded" in many sliding time windows. Unlike in [2], our
episode discovery technique does not use an arbitrary sliding window. Instead, we
exploit the notion of process instances. Although the idea is fairly straightforward,
as far as we know, this notion of frequent episodes was never applied to event logs.</p>
      <p>Numerous applications of process mining to real-life event logs illustrate that
concurrency is a key notion in process discovery [1, 7, 8]. One should avoid showing
all observed interleavings in a process model. First of all, the model gets too complex
(think of the classical \state-explosion problem"). Second, the resulting model will
be over tting (typically one sees only a fraction of the possible interleavings). This
makes the idea of episode mining particularly attractive.</p>
      <p>The remainder of this paper is organized as follows. Section 2 positions the work in
existing literature. The novel notion of episodes and the corresponding rules are de ned
in Section 3. Section 4 describes the algorithms and corresponding implementation in
the process mining framework ProM. The approach and implementation are evaluated
in Section 5 using several publicly available event logs. Section 6 concludes the paper.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Related Work</title>
      <p>The notion of frequent episode mining was rst de ned by Mannila et al. [2]. In their
paper, they applied the notion of frequent episodes to (large) event sequences. The
basic pruning technique employed in [2] is based on the frequency of episodes in an
event sequence. Mannila et al. considered the mining of serial and parallel episodes
separately, each discovered by a distinct algorithm. Laxman and Sastry improved on
the episode discovery algorithm of Mannila by employing new frequency calculation
and pruning techniques [9]. Experiments suggest that the improvement of Laxman
and Sastry yields a 7 times speedup factor on both real and synthetic datasets.</p>
      <p>Related to the discovery of episodes or partial orders is the discovery of end-to-end
process models able to capture concurrency explicitly. The algorithm [10] was
the rst process discovery algorithm adequately handling concurrency. Many other
discovery techniques followed, e.g., heuristic mining [11] able to deal with noise and
low-frequent behavior. The HeuristicsMiner is based on the notion of causal nets
(C-nets). Several variants of the algorithm have been proposed [12, 13]. Moreover,
completely di erent approaches have been proposed, e.g., the di erent types of
genetic process mining [14, 15], techniques based on state-based regions [16, 17], and
techniques based on language-based regions [18, 19]. Another, more recent, approach
is inductive process mining where the event log is split recursively [20]. The latter
technique always produces a block-structured and sound process model. All the
discovery techniques mentioned are able to uncover concurrency based on example
behavior in the log. Additional feature comparisons are summarised in Table 1.</p>
      <p>The episode mining technique presented in this paper is based on the discovery
of frequent item sets. A well-known algorithm for mining frequent item sets and
association rules is the Apriori algorithm by Agrawal and Srikant [4]. One of the
pitfalls in association rule mining is the huge number of solutions. One way of dealing
with this problem is the notion of representative association rules, as described by
Kryszkiewicz [21]. This notion uses user speci ed constraints to reduce the number
of `similar' results. Both sequence mining [5, 6] and episode mining [2] can be viewed
as extensions of frequent item set mining.
This section de nes basic notions such as event logs, episodes and rules. Note that
our notion of episodes is di erent from the notion in [2] which does not consider
process instances.</p>
      <sec id="sec-2-1">
        <title>Activities and Traces Let A be the alphabet of activities. A trace is a list (sequence)</title>
        <p>T = hA1; : : : ; Ani of activities Ai 2 A occurring at time index i relative to the other
activities in T .</p>
        <p>Event log An event log L = [T1; : : : ; Tm] is a multiset of traces Ti. Note that the
same trace may appear multiple times in an event log. Each trace corresponds to
an execution of a process, i.e., a case or process instance. In this simple de nition
of an event log, an event refers to just an activity. Often event logs store additional
information about events, such as timestamps.
3.2</p>
        <sec id="sec-2-1-1">
          <title>Episodes</title>
          <p>Episode An episode is a partial ordered collection of events. Episodes are depicted using
the transitive reduction of directed acyclic graphs, where the nodes represent events,
and the edges imply the partial order on events. Note that the presence of an edge
implies serial behavior. Figure 1 shows the transitive reduction of an example episode.</p>
          <p>Formally, an episode = (V; ; g) is a triple, where V is a set of events (nodes), is
a partial order on V , and g : V 7! A is a left-total function from events to activities,
thereby labelling the nodes/events [2]. For two vertices u; v 2 V we have u &lt; v i u
v and u 6= v. In addition, we de ne G to be the multiset of activities/labels used: G =
[ g(v) j v 2 V ]. Note that if jV j 1, then we got an singleton or empty episode. For the
rest of this paper, we ignore empty episodes. We call an episode parallel when = ;.</p>
          <p>Subepisode and Equality An episode = (V 0; 0; g0) is a subepisode of
denoted , i there is an injective mapping f : V 0 7! V such that:
= (V; ; g),
(8v 2 V 0 : g0(v) = g(f (v))) ^ (8v; w 2 V 0 ^ v 0 w : f (v)
f (w))</p>
          <p>An episode equals episode , denoted
is a strict subepisode of , denoted
, i
=
i</p>
          <p>^
^ 6= .</p>
          <p>. An episode
Episode construction Two episodes = (V; ; g) and = (V 0; 0; g0) can be `merged'
to construct a new episode = (V ; ; g ). is the smallest (i.e., smallest
sets V and ) such that and . As shown below, such an episode
always exists.</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>The smallest sets criteria implies that every event v 2 V and ordered pair v; w 2 V ^ v w must have a witness in and/or . Formally, = i there exists injective mappings f : V 7! V and f 0 : V 0 7! V such that:</title>
        <p>G
= G [ G0
= f (f (v); f (w)) j (v; w) 2
g [ f (f 0(v); f 0(w)) j (v; w) 2
0 g
activity witness
order witness
Occurrence An episode = (V; ; g) occurs in an event trace T = hA1; : : : ; Ani,
denoted v T , i there exists an injective mapping h : V 7! f1; : : ; ng such that:
(8v 2 V : g(v) = Ah(v)) ^ (8v; w 2 V ^ v
w : h(v)
h(w))
In Figure 2 an example of an \event to trace map" h for occurrence checking is given.
Event indices:</p>
        <p>Trace:
A
B
A
C
A
D
A
B
A
C
A
D
(A1) A</p>
        <p>A (A2)
(A1) A
Episode:</p>
        <p>B
(B)</p>
        <p>C
(C)
Mapping 1</p>
        <p>D
(D)</p>
        <p>B
(B)</p>
        <p>C
(C)
Mapping 2</p>
        <p>A (A2)
D
(D)</p>
        <sec id="sec-2-2-1">
          <title>Lemma 1 (Frequency and subepisodes). If an episode is frequent in an</title>
          <p>event log L, then all subepisodes with are also frequent in L. Formally, we
have for a given :
(8
: freq ( )
freq ( ))</p>
        </sec>
      </sec>
      <sec id="sec-2-3">
        <title>Activity Frequency The activity frequency ActFreq (A) of an activity A 2 A in an</title>
        <p>event log L = [T1; : : : ; Tm] is de ned as:</p>
        <p>ActFreq (A) = j [ Ti j Ti 2 L ^ A 2 Ti ] j
jLj
Given a frequency threshold minActFreq , an activity A is frequent i ActFreq (A)
minActFreq .</p>
        <p>Trace Distance Given episode = (V; ; g) occurring in an event trace T =
hA1; : : : ; Ani, as indicated by the event to trace map h : V 7! f1; : : ; ng. Then the
trace distance traceDist ( ; T ) is de ned as:
traceDist ( ; T ) = max f h(v) j v 2 V g
min f h(v) j v 2 V g
In Figure 2, the left mapping yields traceDist ( ; T ) = 6
mapping yields traceDist ( ; T ) = 6 2 = 4.
1 = 5, and the right</p>
        <p>Given a trace distance interval [minTraceDist ; maxTraceDist ], an episode is
accepted in trace T with respect to the trace distance interval i minTraceDist
traceDist ( ; T ) maxTraceDist .</p>
        <p>Informally, the conceptual idea behind a trace distance interval is that we are
interested in a partial order on events occurring relatively close in time.
3.3</p>
        <sec id="sec-2-3-1">
          <title>Episode Rules</title>
        </sec>
      </sec>
      <sec id="sec-2-4">
        <title>Episode rule An episode rule is an association rule ) with</title>
        <p>after seeing , then likely the larger episode will occur as well.</p>
        <p>The con dence of the episode rule is given by:
stating that
conf ( )
)
) =
freq ( )
freq ( )</p>
      </sec>
      <sec id="sec-2-5">
        <title>Given a con dence threshold minConf , an episode rule ) is valid i conf ( ) ) minConf . During the actual episode rule discovery, we use Lemma 2.</title>
        <p>Lemma 2 (Con dence and subepisodes). If an episode rule ) is valid
in an event log L, then for all episodes 0 with 0 the event rule 0 ) is
also valid in L. Formally:
(8
0
: conf ( ) )
conf ( 0 )
))
Episode rule magnitude Let the graph size size( ) of an episode be denoted as the
sum of the nodes and edges in the transitive reduction of the episode. The magnitude
of an episode rule is de ned as:
mag ( )
) =
size( )
size( )</p>
      </sec>
      <sec id="sec-2-6">
        <title>Intuitively, the magnitude of an episode rule ) represents how much episode</title>
        <p>`adds to' or `magni es' episode . The magnitude of an Episode rule allows smart
ltering on generated rules. Typically, an extremely low (approaching zero) or high
(approaching one) magnitude indicates a trivial episode rule.
4</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Realization</title>
      <p>The de nitions and insights provided in the previous section have been used to
implement a episode (rule) discovery plug-in in ProM. To be able to analyze real-life
event logs, we need e cient algorithms. These are described next.</p>
      <p>Notation: in the listed algorithms, we will reference to the elements of an episode
= (V; ; g) as :V , : and :g.
4.1</p>
      <sec id="sec-3-1">
        <title>Frequent Episode Discovery</title>
        <p>Discovering frequent episodes is done in two phases. The rst phase discovers parallel
episodes (i.e., nodes only), the second phase discovers partial orders (i.e., adding the
edges). The main routine for discovering frequent episodes is given in Algorithm 1.</p>
        <p>Algorithm 1: Episodes discovery
Input: An event log L, an activity alphabet A, a frequency threshold minFreq.</p>
        <p>Output: A set of frequent episodes
Description: Two-phase episode discovery. Each phase alternates by generating
new candidate episodes (Cl), and recognizing frequent candidates in the event
log (Fl).</p>
        <p>Proof of termination: Note that candidate episode generation with Fl = ; will
yield Cl = ;. Since each iteration the generated episodes become strictly larger
(in terms of V and ), eventually the generated episodes cannot occur in any
trace. Therefore, always eventually Fl = ;, and thus we will always terminate.</p>
        <p>
          EpisodeDiscovery(L; A; minFreq)
(
          <xref ref-type="bibr" rid="ref1">1</xref>
          ) = ;
(
          <xref ref-type="bibr" rid="ref2">2</xref>
          ) // Phase 1: discover parallel episodes
(
          <xref ref-type="bibr" rid="ref3">3</xref>
          ) l = 1 // Tracks the number of nodes
(
          <xref ref-type="bibr" rid="ref4">4</xref>
          ) Cl = f (V; = ;; g = fv 7! ag) j jV j = 1 ^ v 2 V ^ a 2 A g
(
          <xref ref-type="bibr" rid="ref5">5</xref>
          ) while Cl 6= ;
(
          <xref ref-type="bibr" rid="ref6">6</xref>
          ) Fl = RecognizeFrequentEpisodes(L; Cl; minFreq)
(
          <xref ref-type="bibr" rid="ref7">7</xref>
          ) = [ Fl
(
          <xref ref-type="bibr" rid="ref8">8</xref>
          ) Cl = GenerateCandidateParallel(l; Fl)
(
          <xref ref-type="bibr" rid="ref9">9</xref>
          ) l = l + 1
(
          <xref ref-type="bibr" rid="ref10">10</xref>
          ) // Phase 2: discover partial orders
(
          <xref ref-type="bibr" rid="ref11">11</xref>
          ) l = 1 // Tracks the number of edges
(
          <xref ref-type="bibr" rid="ref12">12</xref>
          ) Cl = f (V = :V; = f(v; w)g; g = :g) j 2
(
          <xref ref-type="bibr" rid="ref13">13</xref>
          ) while Cl 6= ;
(
          <xref ref-type="bibr" rid="ref14">14</xref>
          ) Fl = RecognizeFrequentEpisodes(L; Cl; minFreq)
(
          <xref ref-type="bibr" rid="ref15">15</xref>
          ) = [ Fl
(
          <xref ref-type="bibr" rid="ref16">16</xref>
          ) Cl = GenerateCandidateOrder(l; Fl)
(
          <xref ref-type="bibr" rid="ref17">17</xref>
          ) l = l + 1
(
          <xref ref-type="bibr" rid="ref18">18</xref>
          ) return
^ v; w 2 :V ^ v 6= w g
4.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Episode Candidate Generation</title>
        <p>The generation of candidate episodes for each phase is an adaptation of the well-known
Apriori algorithm over an event log. Given a set of frequent episodes Fl, we can
construct a candidate episode
by combining two partially overlapping episodes
and
from Fl. Note that this implements the episode construction operation
=
.</p>
        <p>For phase 1, we have Fl contains frequent episodes with l nodes and no edges.
A candidate episode
overlap on the rst l
will have l + 1 nodes, resulting from episodes
and
that
1 nodes. This generation is implemented by Algorithm 2.</p>
        <p>For phase 2, we have Fl contains frequent episodes with l edges. A candidate
episode
rst l
will have l + 1 edges, resulting from episodes
and
that overlap on the
1 edges and have the same set of nodes. This generation is implemented
by Algorithm 3. Note that, formally, the partial order
is the transitive closure of
the set of edges being constructed, and that the edges are really only the transitive
reduction of this partial order.</p>
        <p>Algorithm 2: Candidate episode generation { Parallel
Input: A set of frequent episodes Fl with l nodes.</p>
        <p>Output: A set of candidate episodes Cl+1 with l + 1 nodes.</p>
        <p>Description: Generates candidate episodes by merging overlapping episodes
= ). For parallel episodes, overlapping means: sharing l 1 nodes.</p>
        <p>
          GenerateCandidateParallel(l; Fl)
(
          <xref ref-type="bibr" rid="ref1">1</xref>
          ) Cl+1 = ;
(
          <xref ref-type="bibr" rid="ref2">2</xref>
          ) for i = 0 to jFlj 1
(
          <xref ref-type="bibr" rid="ref3">3</xref>
          ) for j = i to jFlj 1
(
          <xref ref-type="bibr" rid="ref4">4</xref>
          ) = Fl[i]
(
          <xref ref-type="bibr" rid="ref5">5</xref>
          ) = Fl[j]
(
          <xref ref-type="bibr" rid="ref6">6</xref>
          ) if 80 i l 2 : :g( :V [i]) = :g( :V [i])
(
          <xref ref-type="bibr" rid="ref7">7</xref>
          ) = (V = ( :V [0 : : l 1] [ :V [l 1]); = ;; g = :g [ :g)
(
          <xref ref-type="bibr" rid="ref8">8</xref>
          ) Cl+1 = Cl+1 [ f g
(
          <xref ref-type="bibr" rid="ref9">9</xref>
          ) else
(
          <xref ref-type="bibr" rid="ref10">10</xref>
          ) break
(
          <xref ref-type="bibr" rid="ref11">11</xref>
          ) return Cl+1
and
(i.e.,
        </p>
        <p>
          Algorithm 3: Candidate episode generation { Partial order
In order to check if a candidate episode is frequent, we check if freq ( )
The computation of freq ( ) boils down to counting the number of traces T with
v T . Algorithm 4 recognizes all frequent episodes from a set of candidate episodes
using the above described approach. Note that for both parallel and partial order
episodes we can use the same recognition algorithm.
minFreq .
(
          <xref ref-type="bibr" rid="ref7">7</xref>
          )
(
          <xref ref-type="bibr" rid="ref8">8</xref>
          )
        </p>
        <p>Algorithm 4: Recognize frequent episodes
Input: An event log L, a set of candidate episodes Cl, a frequency threshold minFreq.
Output: A set of frequent episodes Fl
Description: Recognizes frequent episodes, by ltering out candidate episodes that do not occur
frequently in the log. Note: If Fl = ;, then Cl = ;.</p>
        <p>
          RecognizeFrequentEpisodes(L; Cl; minFreq)
(
          <xref ref-type="bibr" rid="ref1">1</xref>
          ) support = [0; : : : ; 0] with jsupportj = jClj
(
          <xref ref-type="bibr" rid="ref2">2</xref>
          ) foreach T 2 L
(
          <xref ref-type="bibr" rid="ref3">3</xref>
          ) for i = 0 to jClj 1
(
          <xref ref-type="bibr" rid="ref4">4</xref>
          ) if Occurs(Cl[i]; T ) then support[i] = support[i] + 1
(
          <xref ref-type="bibr" rid="ref5">5</xref>
          )
(
          <xref ref-type="bibr" rid="ref6">6</xref>
          ) 1
        </p>
        <p>minFreq then Fl = Fl [ fCl[i]g</p>
        <p>Checking whether an episode occurs in a trace T = hA1; : : : ; Ani is done via
checking the existence of the mapping h : :V 7! f1; : : ; ng. This results in checking
the two propositions shown below. Algorithm 5 implements these checks.
{ Checking whether each node v 2 :V has a unique witness in trace T .
{ Checking whether the (injective) mapping h respects the partial order indicated
by : .</p>
        <p>For the discovery of an injective mapping h for a speci c episode and trace T
we use the following recipe. First, we declare the class of models H : A 7! P(N)
such that for each activity a 2 A we get the set of indices i at which a = Ai 2 T .</p>
        <sec id="sec-3-2-1">
          <title>Next, we try all possible models derivable from H. A model h : :V 7! f1; : : ; ng</title>
          <p>is derived from H by choosing an index i 2 H(f (v)) for each node v 2 :V . With
such a model h, we can perform the actual partial order check against : .</p>
          <p>Algorithm 5: This algorithm implements occurrence checking via recursive
discovery of the injective mapping h as per the occurrence de nition.
Input: An episode , a trace T .</p>
          <p>Output: True i v T
Description: Implements occurrence checking based on nding an occurrence proof in the form of
a mapping h : :V 7! f1; : : ; ng.</p>
          <p>
            Occurs( = (V; ; g); T )
(
            <xref ref-type="bibr" rid="ref1">1</xref>
            ) return checkModel( ; f a 7! f i j a = Ai 2 T g j a 2 A g ; ;)
Input: An episode , a class of mappings H : A 7! P(N), and an intermediate mapping
h : :V 7! f1; : : ; ng.
          </p>
          <p>
            Output: True i there is a mapping h, as per the occurrence de nition, derivable from H
Description: Recursive implementation for nding h based on the following induction principle: Base
sctaespe (biyf -apdadritn)g:Eavmeraypvpi2ngVfoirs mavaeprpteedx (vv2=2ddoommhh.)(.IS.et.e,pincdausect(ieolnset-optahrte)n:u(ImHb)enr voefrmtiacpespaedrevmeratpicpeesd.),
checkModel( = (V; ; g); H; h)
(
            <xref ref-type="bibr" rid="ref1">1</xref>
            ) if 8v 2 V : v 2 dom h
(
            <xref ref-type="bibr" rid="ref2">2</xref>
            ) return (8(v; w) 2 : h(v) h(w))
(
            <xref ref-type="bibr" rid="ref3">3</xref>
            ) else
(
            <xref ref-type="bibr" rid="ref4">4</xref>
            )
(
            <xref ref-type="bibr" rid="ref5">5</xref>
            )
pick v 2 V with v 2= dom h
return (9i 2 H(g(v)) :
checkModel( ; H[g(v) 7! H(g(v)) n fig]; h[v 7! i]))
4.4
          </p>
        </sec>
      </sec>
      <sec id="sec-3-3">
        <title>Pruning</title>
        <p>Using the pruning techniques described below, we reduce the number of generated
episodes (and thereby computation time and memory requirements) and lter out
uninteresting results. These techniques eliminate less interesting episodes by ignoring
infrequent activities and skipping partial orders on activities with low temporal locality.
Activity Pruning Based on the frequency of an activity, uninteresting episodes
can be pruned in an early stage. This is achieved by replacing the activity alphabet</p>
        <sec id="sec-3-3-1">
          <title>A by A A, with</title>
          <p>(8A 2 A : ActFreq (A) minActFreq ), on line 4 in Algorithm 1. This pruning
technique allows the episode discovery algorithm to be more resistant to logs with
many infrequent activities, which are indicative of exceptions or noise.
Trace Distance Pruning The pruning of episodes based on a trace distance
interval can be achieved by adding the trace distance interval check to line 2 of
Algorithm 5. Note that if there are two or more interpretations for h, with one passing
and one rejected by the interval check, then we will nd the correct interpretation
thanks to the 9 on line 5.
4.5</p>
        </sec>
      </sec>
      <sec id="sec-3-4">
        <title>Episode Rule Discovery</title>
        <p>The discovery of episode rules is done after discovering all the frequent episodes. For
all frequent episodes , we consider all frequent subepisodes with for the
episode rule ) .</p>
        <p>For e ciently nding potential frequent subepisodes , we use the notion of
\discovery tree", based on episode construction. Each time we recognize a frequent episode
created from combining frequent episodes and ", we recognize as a child of and
". Similarly, and " are the parents of . See Figure 3 for an example of a discovery tree.</p>
        <p>B
A</p>
        <p>C
C
"</p>
        <p>A
B
A</p>
        <p>C
C</p>
        <p>A
B</p>
        <p>C</p>
        <p>Using the discovery tree we can walk from an episode along the discovery
parents of . Each time we nd a parent with , we can consider the parents
and children of . As result of Lemma 2, we cannot apply pruning in either direction
of the parent-child relation based on the con dence conf ( ) ). This is easy to
see for the child direction. For the parent direction, observe the discovery tree in
Figure 3 and . If for episode we would stop before visiting the parents of
, we would never consider (which has ).
4.6</p>
      </sec>
      <sec id="sec-3-5">
        <title>Implementation Considerations</title>
        <p>
          We implemented the episode discovery algorithm as a ProM 6 plug-in (see also
Figure 4), written in Java. Since the Occurs() algorithm (
          <xref ref-type="bibr" rid="ref5">5</xref>
          ) is the biggest bottleneck,
this part of the implementation was considerably optimized.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>5.1</p>
      <sec id="sec-4-1">
        <title>Methodology</title>
        <p>This section reviews the feasibility of the approach using both synthetic and real-life
event data.</p>
        <p>We ran a series of experiments on two type of event logs. The rst event log,
bigger-example.xes, is an arti cial event log from the Chapter 5 of [1] and available
via http://www.processmining.org/event_logs_and_models_used_in_book.
The second event log, BPI Challenge 2012.xes, is a real life event log available via
doi:10.4121/uuid:3926db30-f712-4394-aebc-75976070e91f. For these
experiments we used a laptop with a Core i5-3570K CPU, 8 GB RAM and Java SE Runtime
Environment 1.7.0 07-b11 (32 bit).
5.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Performance Results</title>
        <p>(a) Event log: bigger-example.xes { minFreq = 0:05, minActFreq = 0:05, maxTraceDist = 3
(b) Event log: BPI Challenge 2012 { minFreq = 0:55, minActFreq = 0:55, maxTraceDist = 5</p>
        <p>As can be seen in all the experiments in Figure 5, we see that the running time is
strongly related to the discovered number of episodes. Note that if some parameters
are poorly chosen, like high maxTraceDist in Figure 5(f), then a relatively large class
of episodes seems to become frequent, thus increasing the running time drastically.</p>
        <p>For a reasonably low number of frequent episodes (&lt; 500, more will a human not
inspect), the algorithm turns out to be quite fast (at most a few seconds for the Challenge
log). We noted a virtual nonexistent contribution of the parallel episode mining phase
to the total running time. This can be explained by a simple combinatorial argument:
there are far more partial orders to be considered than there are parallel episodes.</p>
        <p>An analysis of the e ects of changing the minFreq parameter (Figure 5(a), 5(b))
shows that a poorly chosen value results in many episodes. In addition, the minFreq
parameter gives us ne-grained control of the number of results. It gradually increases
the total number of episodes for lower values. Note that, especially for the Challenge
event log, low values for minFreq can dramatically increase the running time. This
is due to the large number of candidate episodes being generated.</p>
        <p>Secondly, note that for the minActFreq parameter (Figure 5(c), 5(d)), there
seems to be a cuto point that separates frequent from infrequent activities. Small
changes around this cuto point may have a dramatic e ect on the number of episodes
discovered.</p>
        <p>Finally, for the maxTraceDist parameter (Figure 5(e), 5(f)), we see that this
parameter seems to have a sweet-spot where a low { but not too low { number of
episodes are discovered. Chosen a value for maxTraceDist just after this sweet-spot
yields a huge number of episodes.</p>
        <p>When comparing the arti cial and real life event logs, we see a remarkable pattern.
The arti cial event log (bigger-example.xes ), shown in Figure 5(a) appears to be
far more ne-grained than the real life event log (BPI Challenge 2012.xes ) shown in
Figure 5(b). In the real life event log there appears to be a clear distinction between
frequent and infrequent episodes. In the arti cial event log a more exponential pattern
occurs. Most of the increase in frequent episodes, for decreasing minF req, is again
in the partial order discovery phase.
5.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Comparison to existing discovery algorithms</title>
        <p>As noted in the introduction, often the overall end-to-end process models are rather
complicated. Therefore, the search for local patterns (i.e., episodes) is interesting. A
good example of a complicated process is the BPI Challenge 2012 log. In Figure 6 part
of the \spaghetti-like" process models are shown, as an indication of the complexity.
The episodes discovered over same log, depicted in Figure 4(b) gives us a simple and
clear insight into important local patterns in the BPI Challenge 2012 log. Hence,
in these \spaghetti-like" process models, the episode discovery technique allows us
to quickly understand the main patterns.
6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion and Future work</title>
      <p>In this paper, we considered the problem of discovering frequently occurring episodes
in an event log. An episode is a collection of events that occur in a given partial order.
We presented e cient algorithms for the discovery of frequent episodes and episode
rules occurring in an event log, and presented experimental results.</p>
      <p>Our experimental evaluation shows that the running time is strongly related to
the discovered number of episodes. For a reasonably low number of frequent episodes
(&lt; 500, more will a human not inspect), the algorithm turns out to be quite fast (at
most a few seconds). The main problem is the correct setting of the episode pruning
parameters minFreq , minActFreq , and maxTraceDist .</p>
      <p>During the development of the algorithm for ProM 6, special attention was paid
to optimizing the Occurs() algorithm (Algorithm 5) implementation, which proved
to be the main bottleneck. Future work could be to prune occurrence checking based
on the parents of an episode, leveraging the fact that an episode cannot occur in
a trace if a parent also did occur in that trace.</p>
      <p>Another approach to improve the algorithm is to apply the generic divide and
conquer approach for process mining, as de ned in [22]. This approach splits the set
of activities into a collection of partly overlapping activity sets. For each activity
set, the log is projected onto the relevant events, and the regular episode discovery
algorithm is applied. In essence, the same trick is applied as used by the minActFreq
(a) Event log: BPI Challenge 2012 { Discovery algorithm: -algorithm [10].</p>
      <p>(b) Event log: BPI Challenge 2012 { Discovery algorithm: [11].
parameter (using an alphabet subset), which is to create a di erent set of initial
1-node parallel episodes to start discovering with.</p>
      <p>The main bottleneck is the frequency computation by checking the occurrence of
each episode in each trace. Typically, we have a small amount of episodes to check, but
many traces to check against. Using the MapReduce programming model developed by
Dean and Ghemawat, we can easily parallelize the episode discovery algorithm and
execute it on a large cluster of commodity machines [23]. The MapReduce programming
model requires us to de ne map and reduce functions. The map function, in our case,
accepts a trace and produces [episode, trace] pairs for each episode occurring in the
given trace. The reduce function accepts an episode plus a list of traces in which that
episode occurs, and outputs a singleton list if the episode is frequent, and an empty list
otherwise. This way, the main bottleneck of the algorithm is e ectively parallelized.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          : Process Mining: Discovery, Conformance and Enhancement of Business Processes. Springer-Verlag, Berlin (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Mannila</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Toivonen</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Verkamo</surname>
            ,
            <given-names>A.I.</given-names>
          </string-name>
          :
          <article-title>Discovery of Frequent Episodes in Event Sequences</article-title>
          .
          <source>Data Mining and Knowledge Discovery</source>
          <volume>1</volume>
          (
          <issue>3</issue>
          ) (
          <year>1997</year>
          )
          <volume>259</volume>
          {
          <fpage>289</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Lu</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fahland</surname>
            , D., van der Aalst,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>Conformance checking based on partially ordered event data</article-title>
          . To appear
          <source>in Business Process Intelligence</source>
          <year>2014</year>
          , workshop SBS (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Agrawal</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Srikant</surname>
          </string-name>
          , R.:
          <article-title>Fast Algorithms for Mining Association Rules in Large Databases</article-title>
          .
          <source>In: Proceedings of the 20th International Conference on Very Large Data Bases. VLDB '94</source>
          , San Francisco, CA, USA, Morgan Kaufmann Publishers Inc. (
          <year>1994</year>
          )
          <volume>487</volume>
          {
          <fpage>499</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Agrawal</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Srikant</surname>
          </string-name>
          , R.:
          <article-title>Mining Sequential Patterns</article-title>
          .
          <source>In: Proceedings of the Eleventh International Conference on Data Engineering. ICDE '95</source>
          , Washington, DC, USA, IEEE Computer Society (
          <year>1995</year>
          )
          <volume>3</volume>
          {
          <fpage>14</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Srikant</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Agrawal</surname>
          </string-name>
          , R.:
          <article-title>Mining Sequential Patterns: Generalization and Performance Improvements</article-title>
          .
          <source>In: Proceedings of the 5th International Conference on Extending Database Technology: Advances in Database Technology. EDBT '96</source>
          , London, UK, UK, Springer-Verlag (
          <year>1996</year>
          )
          <volume>3</volume>
          {
          <fpage>17</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Lu</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mans</surname>
            ,
            <given-names>R.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fahland</surname>
            , D., van der Aalst,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>Conformance checking in healthcare based on partially ordered event data</article-title>
          . To appear
          <source>in Emerging Technologies and Factory Automation</source>
          <year>2014</year>
          , workshop
          <issue>M2H</issue>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Fahland</surname>
            , D., van der Aalst,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>Repairing process models to re ect reality</article-title>
          .
          <source>In: Proceedings of the 10th International Conference on Business Process Management. BPM'12</source>
          , Berlin, Heidelberg, Springer-Verlag (
          <year>2012</year>
          )
          <volume>229</volume>
          {
          <fpage>245</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Laxman</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sastry</surname>
            ,
            <given-names>P.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Unnikrishnan</surname>
            ,
            <given-names>K.P.</given-names>
          </string-name>
          :
          <article-title>Fast Algorithms for Frequent Episode Discovery in Event Sequences</article-title>
          .
          <source>In: Proc. 3rd Workshop on Mining Temporal and Sequential Data</source>
          . (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weijters</surname>
            ,
            <given-names>A.J.M.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Maruster</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Work ow Mining: Discovering Process Models from Event Logs</article-title>
          .
          <source>IEEE Transactions on Knowledge and Data Engineering</source>
          <volume>16</volume>
          (
          <issue>9</issue>
          ) (
          <year>2004</year>
          )
          <volume>1128</volume>
          {
          <fpage>1142</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Weijters</surname>
            ,
            <given-names>A.J.M.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>van der Aalst</surname>
          </string-name>
          , W.M.P.,
          <string-name>
            <surname>de Medeiros</surname>
            ,
            <given-names>A.K.A.</given-names>
          </string-name>
          :
          <article-title>Process Mining with the Heuristics Miner-algorithm</article-title>
          . BETA Working Paper Series, WP
          <volume>166</volume>
          , Eindhoven University of Technology, Eindhoven (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>de Medeiros</surname>
          </string-name>
          , A.K.A.,
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weijters</surname>
            ,
            <given-names>A.J.M.M.:</given-names>
          </string-name>
          <article-title>Work ow mining: Current status and future directions</article-title>
          . In Meersman, R.,
          <string-name>
            <surname>Tari</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schmidt</surname>
          </string-name>
          , C.D., eds.: On The Move to Meaningful
          <source>Internet Systems</source>
          <year>2003</year>
          :
          <article-title>CoopIS, DOA, and ODBASE</article-title>
          . Volume
          <volume>2888</volume>
          of Lecture Notes in Computer Science. Springer Berlin Heidelberg (
          <year>2003</year>
          )
          <volume>389</volume>
          {
          <fpage>406</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Wen</surname>
          </string-name>
          , L.,
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sun</surname>
          </string-name>
          , J.:
          <article-title>Mining process models with nonfree-choice constructs</article-title>
          .
          <source>Data Mining and Knowledge Discovery</source>
          <volume>15</volume>
          (
          <issue>2</issue>
          ) (
          <year>2007</year>
          )
          <volume>145</volume>
          {
          <fpage>180</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>de Medeiros</surname>
            ,
            <given-names>A.K.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weijters</surname>
            ,
            <given-names>A.J.M.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>van der Aalst</surname>
          </string-name>
          , W.M.P.:
          <article-title>Genetic Process Mining: An Experimental Evaluation</article-title>
          .
          <source>Data Mining and Knowledge Discovery</source>
          <volume>14</volume>
          (
          <issue>2</issue>
          ) (
          <year>2007</year>
          )
          <volume>245</volume>
          {
          <fpage>304</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Buijs</surname>
            ,
            <given-names>J.C.A.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>van Dongen</surname>
            ,
            <given-names>B.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>On the Role of Fitness, Precision, Generalization and Simplicity in Process Discovery</article-title>
          . In Meersman, R.,
          <string-name>
            <surname>Rinderle</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dadam</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhou</surname>
          </string-name>
          , X., eds.
          <source>: OTM Federated Conferences, 20th International Conference on Cooperative Information Systems (CoopIS</source>
          <year>2012</year>
          ). Volume
          <volume>7565</volume>
          of Lecture Notes in Computer Science., Springer-Verlag, Berlin (
          <year>2012</year>
          )
          <volume>305</volume>
          {
          <fpage>322</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Sole</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Carmona</surname>
          </string-name>
          , J.:
          <article-title>Process Mining from a Basis of State Regions</article-title>
          .
          <source>In: Applications and Theory of Petri Nets (Petri Nets</source>
          <year>2010</year>
          ). Volume
          <volume>6128</volume>
          of Lecture Notes in Computer Science., Springer-Verlag, Berlin (
          <year>2010</year>
          )
          <volume>226</volume>
          {
          <fpage>245</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rubin</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Verbeek</surname>
            , H.M.W., van Dongen,
            <given-names>B.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kindler</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          , Gunther, C.W.:
          <article-title>Process Mining: A Two-Step Approach to Balance Between Under tting and Over tting</article-title>
          .
          <source>Software and Systems Modeling</source>
          <volume>9</volume>
          (
          <issue>1</issue>
          ) (
          <year>2010</year>
          )
          <volume>87</volume>
          {
          <fpage>111</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Bergenthum</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Desel</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lorenz</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mauser</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <source>Process Mining Based on Regions of Languages</source>
          . In Alonso, G.,
          <string-name>
            <surname>Dadam</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rosemann</surname>
          </string-name>
          , M., eds.:
          <source>International Conference on Business Process Management (BPM</source>
          <year>2007</year>
          ). Volume
          <volume>4714</volume>
          of Lecture Notes in Computer Science., Springer-Verlag, Berlin (
          <year>2007</year>
          )
          <volume>375</volume>
          {
          <fpage>383</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>van der Werf</surname>
            ,
            <given-names>J.M.E.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>van Dongen</surname>
            ,
            <given-names>B.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hurkens</surname>
            ,
            <given-names>C.A.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Serebrenik</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Process Discovery using Integer Linear Programming</article-title>
          .
          <source>Fundamenta Informaticae</source>
          <volume>94</volume>
          (
          <year>2010</year>
          )
          <volume>387</volume>
          {
          <fpage>412</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Leemans</surname>
            ,
            <given-names>S.J.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fahland</surname>
            , D., van der Aalst,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>Discovering Block-structured Process Models from Incomplete Event Logs</article-title>
          . In Ciardo, G.,
          <string-name>
            <surname>Kindler</surname>
          </string-name>
          , E., eds.
          <source>: Applications and Theory of Petri Nets</source>
          <year>2014</year>
          . Volume
          <volume>8489</volume>
          of Lecture Notes in Computer Science., Springer-Verlag, Berlin (
          <year>2014</year>
          )
          <volume>91</volume>
          {
          <fpage>110</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Kryszkiewicz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Fast Discovery of Representative Association Rules</article-title>
          . In Polkowski, L.,
          <string-name>
            <surname>Skowron</surname>
          </string-name>
          , A., eds.:
          <source>Rough Sets and Current Trends in Computing. Volume 1424 of Lecture Notes in Computer Science</source>
          . Springer Berlin Heidelberg (
          <year>1998</year>
          )
          <volume>214</volume>
          {
          <fpage>222</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>van der Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          :
          <article-title>Decomposing Petri Nets for Process Mining: A Generic Approach</article-title>
          .
          <source>Distributed and Parallel Databases</source>
          <volume>31</volume>
          (
          <issue>4</issue>
          ) (
          <year>2013</year>
          )
          <volume>471</volume>
          {
          <fpage>507</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>Dean</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghemawat</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <source>MapReduce: Simpli ed Data Processing on Large Clusters. Communications of the ACM</source>
          <volume>51</volume>
          (
          <issue>1</issue>
          ) (
          <year>2008</year>
          )
          <volume>107</volume>
          {
          <fpage>113</fpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>