<!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>Action Rules: Counterfactual Explanations in Python ?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lukas Sykora</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tomas Kliegr</string-name>
          <email>tomas.kliegrg@vse.cz</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Information and Knowledge Engineering, Faculty of Informatics and Statistics, University of Economics</institution>
          ,
          <addr-line>Prague</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>Action rule mining is an extension of the widely used task of learning classi cation rules. In addition to information expressed in a standard classi cation rule, an action rule suggests a course of action. If performed, this action will increase the probability that the class of the instance will change to the desired value. Such rule can either be interpreted as a recommendation for an action, or as a counterfactual explanation for the class assigned to the instance. In this paper, we report on a new implementation of action rules discovery that is available in Python (ActionRules package) and on a new experimental method for learning action rules from large datasets (RandomForestRules package), which is based on extraction of classi cation rules from Random Forests. The paper can serve as a manual for using the created packages or as a guide for researchers who would like to extend them, providing also guide to action rule discovery. The text also includes performance evaluation of reduction trees, which speed up the mining process.</p>
      </abstract>
      <kwd-group>
        <kwd>Action Rules</kwd>
        <kwd>Explainable Machine Learning</kwd>
        <kwd>Classi ca- tion</kwd>
        <kwd>Rule Learning</kwd>
        <kwd>Counterfactual explanation</kwd>
        <kwd>Benchmark</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        An action rule describes how an action (a change in the value in one or more
exible attributes) could impact the classi cation of a given object. Similarly as
standard classi cation rules [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], action rules can also be learnt from data [9]. In
addition to choosing the attribute serving as the predicted class, the required
additional settings from the user is a designation of a subset of attributes as
` exible'; the remaining attributes are considered as `stable'. Also, the user needs
to set which target class values are desired (wanted).
      </p>
      <p>Considering the well-known Titanic dataset1, an example of a generated
action rule is: \If attribute `Sex' is `female', attribute `Embarked' value
`Southampton' is changed to `Cherbourg', attribute `Passenger Class' value `3' is changed
to `1', then `Survived' value `0' is changed to `1' with support: 5%, con dence:
58% and uplift: 6%." This action rule can either serve as recommendation for a
course of action to take to increase the probability of survival, or more ttingly
on this retrospective dataset, a counterfactual (\what if") explanation for the
classi cation.</p>
      <p>To the best of the author's knowledge, the only publicly available
implementation of action rules is LISp-Miner2 developed at the University of Economics
in Prague, which is primarily focused on Windows users who use it via a
Graphical User Interface. In this paper, we introduce an alternative implementation of
action rule mining for Python.</p>
      <p>The ActionRules package3 covered in this paper implements the action rules
algorithm as described in [9] with a performance improvement by a reduction
tree described in [10]. We also describe its experimental extension available as
RandomForestRules package4, which extracts classi cation rules from tree
ensembles generated by Random Forests. The packages are accompanied by several
Jupyter Notebooks, demonstrating di erent use cases of the software. The
packages are available under an open license (MIT).</p>
      <p>The structure of the work is the following. In Section 2, we motivate the
problem of action rule mining. Section 3 gives the details of the algorithmic approach
used. In Section 4, we present a proposal for a new method for extracting
association rules from Random forests. Section 5 describes the new implementation
of action rules, which is the main contribution of this paper. Section 6 describes
the attempted performance improvements: reduction trees and extracting action
rules from Random Forests. In the conclusions, we summarize the contributions.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>
        Algorithmically, there are two principal approaches to action rule mining [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]: a
rule-based approach and the object-based approach.
      </p>
      <p>
        The rule-based approach is divided into two independent steps. In the rst
step, classi cation rules are mined by any suitable association rule mining
algorithm (for example Apriori [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] modi ed for Classi cation Association Rules [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]).
In the second step, action rules are generated from the classi cation rules.
      </p>
      <p>
        In the object-based approach, action rules are discovered directly from the
source dataset. Speci c algorithms include LERS (Learning from Examples based
on Rough Sets) or ERID (Algorithm for Extracting Rules from Incomplete
Decision System) with atomic action sets [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>In the software package introduced in this paper, we adopt the rule-based
approach, which is in our opinion more modular. There is a range of highly
performing association rule mining algorithms that can be adopted for the rst
step of classi cation rule mining.</p>
      <sec id="sec-2-1">
        <title>2 https://lispminer.vse.cz/ 3 https://github.com/lukassykora/actionrules 4 https://github.com/lukassykora/randomForestRules</title>
        <p>2.1</p>
        <sec id="sec-2-1-1">
          <title>Phase 1: Classi cation Rule Mining</title>
          <p>In the rst step of the rule-based approach, classi cation rules are mined. A
formal representation of a classi cation rule containing four conditions is:
r = [(a1 ^ b1 ^ c1 ^ e1) ) d1];
(1)
where a1, b1, c1, e1 are values of features (attributes) in the antecedent of the
rule, and d1 is a value of the target variable predicted by the consequent of the
rule.</p>
          <p>Each discovered rule is accompanied by values of support and con dence that
express its quality.</p>
          <p>The support of a rule ant ) d1 (denoted as sup(ant ) d1)) is a number
of transactions (rows in training data set) that match both the antecedent and
consequent of the given rule.</p>
          <p>The con dence of a rule ant ) d1 (denoted as conf (ant ) d1)) is expressed
as sup(ant ) d1)=sup(ant). It corresponds to a ratio between the number of
transactions that satisfy the antecedent as well as the consequent to the number
of transactions that satisfy the antecedent of the rule (denoted as sup(ant)).
2.2</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Phase 2: Generation of Action Rules</title>
          <p>In the second step, action rules are formed from a subset of discovered classi
cation rules.</p>
          <p>An action rule can be represented as:
r = [(!) ^ ( ! )] ) [ ! ];
(2)
where ! is a xed condition (set of stable attributes), which describes the
object, ( ! ) is the proposed to change to a subset of user-designated exible
attributes and ( ! ) represents the implied change to the target attribute.</p>
          <p>
            The quality of action rules can be represented using the following
measures. Let r be an action rule, which was generated from two classi cation
rules r1 and r2. We compute the support of the action rule r as sup(r) =
min(sup(r1); sup(r2)). The con dence of the action rule r is computed as conf (r) =
conf (r1) conf (r2). These de nitions were adopted from [
            <xref ref-type="bibr" rid="ref4">4</xref>
            ] and simpli ed. Note
that other somewhat di erent de nitions can also be found in the literature [11].
Uplift is a measure used to predict an incremental response to an action [8].
We propose to adapt this measure for the purpose of evaluating an action rule
r as follows: uplif t = P (decisionjtreatment) P (decisionjno treatment): The
instances are divided into two groups : control and exposed. Exposed group
(treatment) is exposed to the recommended action whereas control group (no treatment)
is suppressed from the recommended action. The decision expresses the
classication of the instances.
          </p>
          <p>Note that the de nitions of support and con dence for action rules are
different from these de nitions for classi cation rules.
2.3</p>
        </sec>
        <sec id="sec-2-1-3">
          <title>Example</title>
          <p>Below is an example of two classi cation rules discovered from the Titanic
dataset.</p>
          <p>r1 = [(Sex : f emale ^ Embarked : S ^ P class : 3) ) Survived : 0];
with support 10% and conf idence 55%: (3)
r2 = [(Sex : f emale ^ Embarked : C ^ P class : 1) ) Survived : 1];
with support 6% and conf idence 86%: (4)</p>
          <p>Rule r1 can be interpreted as follows: women who embarked on a voyage in
Southampton in the third class did not survive with probability of 55%. Rule r2
can be interpreted as follows: women who embarked on a voyage in Cherbourg
in the rst class survived with probability of 86%.</p>
          <p>Based on these two classi cation rules, the following action rule can be
generated:
r = [(Sex : f ) ^ (Embarked : S ! C) ^ (P class : 3 ! 1)] ) [Surv: : 0 ! 1];
with support 5 %; con dence 59 % and uplift 5:7%: (5)</p>
          <p>This action rule can be interpreted as follows: women who travelled from
Southampton in the third class would have increased their chances of survival if
they had changed their boarding place to Cherbourg and had paid extra money
for the rst class.
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Action Rule Generation with Rule-based Approach</title>
      <p>In the following, we will outline the phase 2 of the rule-based approach for action
rule generation, in which the algorithm attempts to form action rules from all
pairs of classi cation rules.</p>
      <p>The process is the following:
{ Discovered classi cation rules are (conceptually) represented as a table where
each condition in the antecedent is a column. There is also one column for
consequent (target variable).
{ Conditions in the antecedent are divided into stable and exible. Stable
conditions do not allow any change of their state (no action can be taken).</p>
      <p>Flexible conditions allow changing their state (the action can be taken).
{ The table of classi cation rules is divided into two tables. The rst table X
contains classi cation rules without the desired state. In the second table
X , there are classi cation rules with the desired state.
{ Classi cation rule pairs are created as a Cartesian product of the rows in
these two tables X X . Each of these rowcount(X ) rowcount(X )
classi cation rule pairs is a candidate for an action rule. The action rule
candidate is therefore formed from a rule predicting other than a desired
class state before and a rule predicting a desired class state after.
{ The algorithm loops through all candidates. If there are no pairs left, the
algorithm nishes, and returns the saved action rules.
{ On each loop, all the stable antecedent pairs and exible antecedent pairs
are checked. If the conditions given in Section 3.1 are satis ed, the pair is
changed to an action rule and saved.
3.1</p>
      <sec id="sec-3-1">
        <title>Conditions for Validation of Classi cation Rules Pairs</title>
        <p>
          There are several approaches to check whether a pair of classi cation rules
satis es the conditions and can be used for generation of an action rule.
Baseline approach The approach, which we consider as a baseline, is described
in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].The same stable attribute needs to be present in both rules and their values
must be the same. Flexible attributes of both classi cation rules must be present
in both rules and their values must be di erent.
        </p>
        <p>Values of the target attribute in the consequent must comply with the user
setting. For example, when generating action rules for the Titanic dataset, we
would like to change the target state from Survival: No to Survival: Yes, but not
in the opposite way.</p>
        <p>Extended action rules An alternative approach described in [9] may generate
more action rules, because it allows to generate candidates from the input
classication rules even if they have missing values. For example, this approach would
generate rules such as: \If any `Pclass' value is changed to `1', then `Survived'
value `0' is changed to `1'."
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Speed Up by Reduction Tree</title>
        <p>A pre-processing step for speeding up the phase 2 of action rule mining is
described in [10]. This step is implemented in the software package introduced in
this paper.</p>
        <p>This approach is based on the splitting of the table of all classi cation rules
to multiple small tables, which allows pruning the search space. For each stable
attribute, one table with rules is generated, since the values of stable attributes
must always be the same in the state before and the state after in the action
rule candidate pair. Some tables can be eliminated because they do not contain
the desired target value, or they do not have enough variability, see Figure 1.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Extraction of Action Rules from Random Forest</title>
      <p>A challenge for classi cation rule mining are datasets containing many features
and many rows. In this case, association rule classi cation algorithms used in
phase 1 of action rule generation can fail due to excessive combinatorial
complexity.</p>
      <p>
        Random Forest [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] is a classi cation learning method that produces an
ensemble of decision trees. The target class is selected by voting. This method is
known for its ability to process very large multidimensional datasets.
      </p>
      <p>Classi cation rules can be extracted from a Random Forest model and used
as an input to phase 2 of action rule generation. The proposed algorithm for
generation of action rules from Random Forests based on this principle is outlined
in the following:
{ Features in the input data are subject to one-hot encoding. This replaces
each multinominal column with n distinct values with n 1 binary columns.
{ Random Forest classi er is learnt on the recoded dataset.
{ All decision trees are extracted from the Random Forest Classi er.
{ Extracted decision trees are transformed to classi cation rules.
{ Classi cation rules not meeting minimum support and minimum con dence
thresholds are removed.</p>
      <p>According to preliminary experiments, extraction of classi cation rules from
a Random Forest is much faster on datasets, which are di cult to process for
association rule mining algorithms, such as Apriori. The disadvantage of this
approach is that the the standard algorithm for inducing Random Forests is neither
deterministic nor exhaustive. Association rule mining algorithms guarantee that
a complete set of rules valid with respect to user-set minimum con dence and
minimum support thresholds is found. Furthermore, there is no random element
involved in association rule mining.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Implementation</title>
      <p>The ActionRules package allows two ways of operation. Either the complete
mining work ow can be executed, using Apriori for phase 1, or only action rule
generation (phase 2) can be initiated from classi cation rules supplied as a data
frame.</p>
      <p>The ActionRules package and RandomForestRules package are available in
PyPi (Python Package Index). They can be installed by the following commands:
pip install actionrules-lukassykora
pip install randomForestRules-lukassykora
5.1</p>
      <sec id="sec-5-1">
        <title>ActionRules package</title>
        <p>The package for action rules mining uses PyFIM5 library as a default option for
classi cation rule discovery. The PyFIM package returns an exhaustive list of
classi cation rules used as input for action rule generation.</p>
        <p>
          The ActionRules package uses the same general machine learning work ow
as Scikit-Learn [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], a popular data mining library.
        </p>
      </sec>
      <sec id="sec-5-2">
        <title>Instantiate model object</title>
        <p>Firstly, the model is instantiated.</p>
        <p>Code 1 Instantiate model object
1 from actionrules.actionRulesDiscovery import ActionRulesDiscovery
2
3 actionRDiscovery = ActionRulesDiscovery()</p>
      </sec>
      <sec id="sec-5-3">
        <title>Fit model to training data</title>
        <p>In the next step, the model is t to training data. In this case, Titanic dataset
is used. All features are pre-processed to be nominal.</p>
        <p>In the example listing below, the stable attribute is Age, exible attributes
are Embarked, Fare and Pclass, the consequent is set to Survived. Minimum
con dence is set to 55% and minimum support to 3%. These thresholds are used
only for generating classi cation rules (phase 1). Desired class for Survived is
1. Mining of extended action rules is not enabled (is nan=False) and reduction
trees are used to speed up phase 2 (is reduction=True). Both the minimum
number of stable attributes and the minimum number of exible attributes in
action rules is set to 1.</p>
        <p>Code 2 Fit model to training data
4 actionRDiscovery.read csv("data/titanic.csv", sep="nt")
5 actionRDiscovery. t(stable attributes = ["Age"],
6 exible attributes =
7 ["Embarked",
8 "Fare",
9 "Pclass"],
10 consequent = "Survived",
11 conf=55,
12 supp=3,
13 desired classes = ["1"],
14 is nan=False,
15 is reduction=True,
16 min stable attributes=1,
17 min exible attributes=1)</p>
        <sec id="sec-5-3-1">
          <title>5 http://www.borgelt.net/pyfim.html</title>
        </sec>
      </sec>
      <sec id="sec-5-4">
        <title>Predict &amp; Evaluate</title>
        <p>This is the last step of the action rule mining work ow.</p>
        <p>Code 3 Predict &amp; Evaluate
18 new/_data = [['32-48', 'S', 'very high' ,'3.0']]
19 df_new_data = pd.DataFrame(new data, columns = ["Age",
20 "Embarked",
21 "Fare",
22 "Pclass"])
23 actionRDiscovery.predict(df new data)</p>
        <p>As a result, the application returns a table with recommended actions (marked
with *).</p>
      </sec>
      <sec id="sec-5-5">
        <title>ActionRules package combined with RandomForestRules package</title>
        <p>The example below shows how to use the package RandomForestRules together
with the ActionRules package. The dataset Audiology 6 is used for
demonstration. Mining with Apriori using PyFIM fails on this dataset with the following
setting: minimum support: 0.5%, minimum con dence: 50% and unlimited length
of nal itemsets.
6 http://archive.ics.uci.edu/ml/datasets/audiology+(standardized)
Code 4 ActionRules package combined with RandomForestRulespackage</p>
        <p>Output:
rule 1. [(age-gt-60: t) ^ (bone: unmeasured) ^ (history-noise: t ! f) ] )
[target: 0 ! 1] with support: 0.018 and con dence: 0.561
rule 2. [(age-gt-60: t) ^ (bone: mild) ^ (history-noise: t ! f) ] ) [target: 0
! 1] with support: 0.018 and con dence: 0.561
rule 3. [(age-gt-60: t) ^ (bone: ?) ^ (history-noise: t ! f) ] ) [target: 0 ! 1]
with support: 0.018 and con dence: 0.561
rule 4. [(age-gt-60: t) ^ (ar-u: absent) ^ (history-noise: f ! t) ^ (o-ar-c:
absent ! normal) ] ) [target: 0 ! 1] with support: 0.001 and con dence: 0.666
rule 5. [(age-gt-60: t) ^ (ar-u: absent) ^ (history-noise: f ! t) ^ (o-ar-c:
elevated ! normal) ] ) [target: 0 ! 1] with support: 0.001 and con dence:
0.666
rule 6. [(age-gt-60: t) ^ (ar-u: absent) ^ (history-noise: f ! t) ^ (o-ar-c: ? !
normal) ] ) [target: 0 ! 1] with support: 0.001 and con dence: 0.666
6</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Evaluation</title>
      <p>The evaluation was run on a notebook Dell Latitude E7470 with con guration
Intel Core i5-6300U 2.40GHz with 8GB RAM. The Titanic dataset is used for
tting the models.
6.1</p>
      <sec id="sec-6-1">
        <title>ActionRules Package Performance</title>
        <p>In this section, we evaluate the e ect of the use of extended action rules and
of reduction trees on the performance. We use the ActionRules package for the
whole process of action rules discovery.</p>
        <p>Setup The minimum con dence was xed to 50%, and the minimum support
threshold was varied. The evaluation was performed in four con gurations:
reduction trees enabled/disabled, extended association rules enabled/disabled. All
con gurations are always tested three times and the median result is used for
comparison.</p>
        <p>Results Results are reported in Figure 2. The left graph shows the performance
for the baseline approach to action rules mining (certainty). The right graph
shows the performance for extended action rules mining (uncertainty). The
runtime of calculation with `uncertainty' is more than 100x higher, but also the
number of found action rules is higher (2443 extended action rules vs. 105
action rules). The reduction trees have a consistent positive e ect on performance.
Setup The setting for classi cation rules discovery was the following: minimum
support 3% and minimum con dence 55% (these thresholds are used just for
ltering of rules extracted from the Random Forest). The package uses the
RandomForestClassi er7 from Scikit-learn library. All settings are kept as default,
just for n estimators several values (10,20,30) were tested. The author also
separately evaluates generation of action rules from a passed list classi cation rules
with the following setting: stable attributes = ["Age", "Sex"], exible attributes
= ["Embarked", "Fare", "Pclass"], consequent = "Survived", desired classes =
["1.0"].</p>
        <p>Results Results are reported in Table 2. As can be seen, only very few unique
classi cation rules were extracted from the Random Forest models, which
resulted in no discovered action rules. The probable reason is that the Random
Forest algorithm creates many duplicate trees (or their parts), which are largely
7 https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.</p>
        <p>RandomForestClassifier.html
overlapping. If the PyFIM package that uses the Apriori algorithm was used for
the same task, 13 action rules were discovered.</p>
        <p>On the other hand, generating classi cation rules using RandomForestRules
was successful for the Audiology dataset, where application of association rule
mining to generate candidates was not successful (cf. Section 5.2).
7</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Conclusion</title>
      <p>In this paper, we described two new Python packages for action rule mining.
The rst package ActionRulesDiscovery is primarily intended for mining of
action rules from classi cation rules generated with association rule mining (from
class association rules). The second experimental package RandomForestRules
extracts classi cation rules from Random Forest models. This package can be
combined with ActionRulesDiscovery to facilitate discovery of action rules from
very large multidimensional datasets.</p>
      <p>
        In terms of performance, the approach taken in ActionRulesDiscovery
benets from the use of PyFIM package, which wraps the high performing low-level
implementation of Apriori [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] for generating candidate classi cation rules. The
ActionRulesDiscovery package is written in Python. The package could be
extended by rewriting the action rule generation algorithm to C or C++, which
would make the mining process faster. The direction of using random forests to
generate action rules is promising, but needs further investigation.
8. Kumar, A., Kumar, R.: Uplift modeling: Predicting incremental gains (2018)
9. Ras, Z.W., Wieczorkowska, A.: Action-rules: How to increase pro t of a company.
      </p>
      <p>In: European Conference on Principles of Data Mining and Knowledge Discovery.
pp. 587{592. Springer (2000)
10. Ras, Z.W., Wyrzykowska, E., Wasyluk, H.: Aras: Action rules discovery based on
agglomerative strategy. In: International Workshop on Mining Complex Data. pp.
196{208. Springer (2007)
11. Tzacheva, A.A., Ras, Z.W.: Action rules mining. International Journal of
Intelligent Systems 20(7), 719{736 (2005)</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>1. An introduction to machine learning with scikit-learn. scikit-learn (</article-title>
          <year>2019</year>
          ), https: //scikit-learn.org/stable/tutorial/basic/tutorial.html
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Agrawal</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Srikant</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          , et al.:
          <article-title>Fast algorithms for mining association rules</article-title>
          .
          <source>In: Proc. 20th int. conf. very large data bases, VLDB</source>
          . vol.
          <volume>1215</volume>
          , pp.
          <volume>487</volume>
          {
          <issue>499</issue>
          (
          <year>1994</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Breiman</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Random forests</article-title>
          .
          <source>Machine learning 45(1)</source>
          ,
          <volume>5</volume>
          {
          <fpage>32</fpage>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Dardzinska</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Action rules mining</article-title>
          , vol.
          <volume>468</volume>
          . Springer (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. Furnkranz, J.,
          <string-name>
            <surname>Gamberger</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lavrac</surname>
          </string-name>
          , N.:
          <article-title>Foundations of rule learning</article-title>
          . Springer Science &amp; Business
          <string-name>
            <surname>Media</surname>
          </string-name>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Hahsler</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chelluboina</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hornik</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Buchta</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>The arules r-package ecosystem: analyzing interesting patterns from large transaction data sets</article-title>
          .
          <source>Journal of Machine Learning Research 12(Jun)</source>
          ,
          <year>2021</year>
          {
          <year>2025</year>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Jovanoski</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lavrac</surname>
          </string-name>
          , N.:
          <article-title>Classi cation rule learning with apriori-c</article-title>
          .
          <source>In: Portuguese Conference on Arti cial Intelligence</source>
          . pp.
          <volume>44</volume>
          {
          <fpage>51</fpage>
          . Springer (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>