Skip to main content

The package for action rules mining using Action-Apriori (Apriori Modified for Action Rules Mining)..

Project description

Action Rules

pypi python Build Status codecov

The package for action rules mining using Action-Apriori (Apriori Modified for Action Rules Mining).

Installation

$ pip install action-rules

For command-line interface (CLI) usage, the action-rules package must be installed using pipx:

$ pipx install action-rules

Features

Action Rules API

# Import Module
from action_rules import ActionRules
import pandas as pd

# Get Data
transactions = {'Sex': ['M', 'F', 'M', 'M', 'F', 'M', 'F'],
                'Age': ['Y', 'Y', 'O', 'Y', 'Y', 'O', 'Y'],
                'Class': [1, 1, 2, 2, 1, 1, 2],
                'Embarked': ['S', 'C', 'S', 'C', 'S', 'C', 'C'],
                'Survived': [1, 1, 0, 0, 1, 1, 0],
                }
data = pd.DataFrame.from_dict(transactions)
# Initialize ActionRules Miner with Parameters
stable_attributes = ['Age', 'Sex']
flexible_attributes = ['Embarked', 'Class']
target = 'Survived'
min_stable_attributes = 2
min_flexible_attributes = 1  # min 1
min_undesired_support = 1
min_undesired_confidence = 0.5  # min 0.5
min_desired_support = 1
min_desired_confidence = 0.5  # min 0.5
undesired_state = '0'
desired_state = '1'
# Action Rules Mining
action_rules = ActionRules(
    min_stable_attributes=min_stable_attributes,
    min_flexible_attributes=min_flexible_attributes,
    min_undesired_support=min_undesired_support,
    min_undesired_confidence=min_undesired_confidence,
    min_desired_support=min_desired_support,
    min_desired_confidence=min_desired_confidence,
    verbose=True
)
# Fit
action_rules.fit(
    data=data,  # cuDF or Pandas Dataframe
    stable_attributes=stable_attributes,
    flexible_attributes=flexible_attributes,
    target=target,
    target_undesired_state=undesired_state,
    target_desired_state=desired_state,
    use_sparse_matrix=True,  # needs SciPy or Cupyx (if use_gpu is True) installed
    use_gpu=False,  # needs Cupy installed
)
# Print rules
# Example: [(Age: O) ∧ (Sex: M) ∧ (Embarked: S → C)] ⇒ [Survived: 0 → 1], support of undesired part: 1, confidence of undesired part: 1.0, support of desired part: 1, confidence of desired part: 1.0, uplift: 1.0
for action_rule in action_rules.get_rules().get_ar_notation():
    print(action_rule)
# Print rules (pretty notation)
# Example: If attribute 'Age' is 'O', attribute 'Sex' is 'M', attribute 'Embarked' value 'S' is changed to 'C', then 'Survived' value '0' is changed to '1 with uplift: 1.0.
for action_rule in action_rules.get_rules().get_pretty_ar_notation():
    print(action_rule)
# JSON export
print(action_rules.get_rules().get_export_notation())

Action Rules CLI

$ action-rules --min_stable_attributes 2 --min_flexible_attributes 1 --min_undesired_support 1 --min_undesired_confidence 0.5 --min_desired_support 1 --min_desired_confidence 0.5 --csv_path 'data.csv' --stable_attributes 'Sex, Age' --flexible_attributes 'Class, Embarked' --target 'Survived' --undesired_state '0' --desired_state '1' --output_json_path 'output.json'

Confidence Intervals

Compute confidence intervals for uplift and realistic rule gain using one of three methods: bootstrap, analytic (Wald), or Bayesian.

$ pip install action-rules[inference]   # adds scipy
$ pip install action-rules[viz]         # adds matplotlib + scipy
from action_rules import ActionRules

# After fitting action rules...
action_rules = ActionRules(
    min_stable_attributes=2, min_flexible_attributes=1,
    min_undesired_support=1, min_undesired_confidence=0.5,
    min_desired_support=1, min_desired_confidence=0.5,
)
action_rules.fit(data, stable_attributes, flexible_attributes, target, '0', '1')

# Compute bootstrap confidence intervals
results = action_rules.confidence_intervals(
    data,
    method="bootstrap",      # "bootstrap", "analytic", "wald", or "bayesian"
    confidence_level=0.95,
    threshold=0.0,           # categorize rules as Accept/Reject/Uncertain
    n_bootstrap=1000,        # bootstrap resamples (bootstrap only)
    random_state=42,
)

# Each result contains: uplift_point, uplift_ci_lower, uplift_ci_upper, uplift_se,
# realistic_rule_gain_point/ci_lower/ci_upper/se (if utility tables provided),
# category (RuleCategory.ACCEPT / REJECT / UNCERTAIN)
for r in results:
    print(f"Rule {r.rule_index}: uplift = {r.uplift_point:.4f} "
          f"[{r.uplift_ci_lower:.4f}, {r.uplift_ci_upper:.4f}] → {r.category.value}")

# JSON export now includes CI data
print(action_rules.get_rules().get_export_notation())

Visualization

from action_rules.visualization import bootstrap_histogram, forest_plot, grouped_forest_plot

# Single-rule distribution (bootstrap or Bayesian)
fig = bootstrap_histogram(results[0], metric="uplift", threshold=0.0)
fig.savefig("distribution.png")

# Forest plot: all rules with CI bars
fig = forest_plot(results, metric="uplift", threshold=0.0)
fig.savefig("forest.png")

# Compare methods side-by-side
results_boot = action_rules.confidence_intervals(data, method="bootstrap", random_state=42)
results_anal = action_rules.confidence_intervals(data, method="analytic")
results_bayes = action_rules.confidence_intervals(data, method="bayesian", random_state=42)

fig = grouped_forest_plot(
    {"bootstrap": results_boot, "analytic": results_anal, "bayesian": results_bayes},
    metric="uplift",
    threshold=0.0,
)
fig.savefig("comparison.png")

CLI with Confidence Intervals

$ action-rules --min_stable_attributes 2 --min_flexible_attributes 1 \
    --min_undesired_support 1 --min_undesired_confidence 0.5 \
    --min_desired_support 1 --min_desired_confidence 0.5 \
    --csv_path data.csv --stable_attributes 'Sex, Age' \
    --flexible_attributes 'Class, Embarked' --target Survived \
    --undesired_state 0 --desired_state 1 \
    --ci_method bootstrap --confidence_level 0.95 --n_bootstrap 1000 \
    --ci_threshold 0.0 --random_state 42 \
    --output_json_path output.json

Available CI options:

  • --ci_methodbootstrap, analytic, wald, or bayesian
  • --confidence_level — confidence level (default: 0.95)
  • --ci_threshold — threshold for Accept/Reject/Uncertain categorization
  • --n_bootstrap — number of bootstrap resamples (default: 1000)
  • --n_mc — number of Monte Carlo draws for Bayesian (default: 10000)
  • --random_state — random seed for reproducibility

Jupyter Notebook Examples

Hands-On Telco Tour

A two-notebook end-to-end walkthrough on the Telco Customer Churn dataset. Run them in order; together they take under a minute. (folder README)

Inference and Validation Studies

A self-contained suite of replicability notebooks for the package's confidence-interval and cross-validation tooling. Each notebook persists a CSV under notebooks/inference_studies/results/ so the studies can be inspected without rerunning. (folder README)

Performance

Credits

This package was created with Cookiecutter and the waynerv/cookiecutter-pypackage project template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

action_rules-1.1.0.tar.gz (109.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

action_rules-1.1.0-py3-none-any.whl (77.5 kB view details)

Uploaded Python 3

File details

Details for the file action_rules-1.1.0.tar.gz.

File metadata

  • Download URL: action_rules-1.1.0.tar.gz
  • Upload date:
  • Size: 109.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for action_rules-1.1.0.tar.gz
Algorithm Hash digest
SHA256 37e38719fa9359de171eb425eae46a28c6a433d5656717a4e231b8d1c12cc8e9
MD5 1802271589f6c9bac35e56b337dd0d3a
BLAKE2b-256 105bbcace25457b18f21132c96e90e6d05a3ca91543bcd5d15046e7c905bfb16

See more details on using hashes here.

File details

Details for the file action_rules-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: action_rules-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 77.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for action_rules-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 476f3a13a3b21a16399b38ba425d29cae528090a37558f294ce7ebffb04eaad5
MD5 9ea1ba64c624e7158e80dfb128b7385b
BLAKE2b-256 348477061ad3b9b8a45a0009e54a1f9a9c95cf226058749d331e3dd00298cdf5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page