The package for action rules mining using Action-Apriori (Apriori Modified for Action Rules Mining)..
Project description
Action Rules
The package for action rules mining using Action-Apriori (Apriori Modified for Action Rules Mining).
- Documentation: https://lukassykora.github.io/action-rules
- GitHub: https://github.com/lukassykora/action-rules
- PyPI: https://pypi.org/project/action-rules/
- Free software: MIT
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_method—bootstrap,analytic,wald, orbayesian--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
- Confidence Intervals (Bootstrap, Analytic, Bayesian)
- Titanic Dataset (GPU accelerated)
- Customer Churn (easy workflow)
- High-Utility Action Rules Mining Example
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)
- End-to-end mining with utility tables, confidence intervals, and JSON export
- Visual diagnostics: churn-rate panel, bootstrap distribution, forest plot, bootstrap vs analytic CI scatter
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)
- Per-rule confidence intervals across five inference methods (bootstrap percentile/BCa, Wald, Wilson, Bayesian) on four benchmark datasets
- Empirical coverage simulation: do the nominal 95% intervals actually cover 95% of the time?
- Runtime benchmark of every CI method on every dataset
- Rule categorization (Accept / Reject / Uncertain) for uplift and realistic rule gain
- Stratified K-fold cross-validation with four targeting strategies and three reliability views
- Sensitivity of the categorization to support-threshold perturbations
- Sensitivity of realistic rule gain to a uniform cost-side rescaling of the utility tables
Performance
- Customer Churn (GPU vs. CPU, sparse matrix vs. dense matrix, Pandas vs. cuDF)
- Scalene Profiling
- GPU Memory Usage - Sparse vs. Dense Matrix
- CPU Usage
- Compare the Action-Rules package with ActionRulesDiscovery package - link to ActionRulesDiscovery package: https://github.com/lukassykora/actionrules
Credits
This package was created with Cookiecutter and the waynerv/cookiecutter-pypackage project template.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37e38719fa9359de171eb425eae46a28c6a433d5656717a4e231b8d1c12cc8e9
|
|
| MD5 |
1802271589f6c9bac35e56b337dd0d3a
|
|
| BLAKE2b-256 |
105bbcace25457b18f21132c96e90e6d05a3ca91543bcd5d15046e7c905bfb16
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
476f3a13a3b21a16399b38ba425d29cae528090a37558f294ce7ebffb04eaad5
|
|
| MD5 |
9ea1ba64c624e7158e80dfb128b7385b
|
|
| BLAKE2b-256 |
348477061ad3b9b8a45a0009e54a1f9a9c95cf226058749d331e3dd00298cdf5
|