RERBOT

Docs

The R package is the canonical engine. The Studio on this site runs a Python port of its core stages — same blocking, same missing-value-aware similarities, same clustering ideas.

Install

# R (canonical package)
install.packages("remotes")
remotes::install_github("xinminchu/erbot")

library(erbot)

Quickstart

# one call: nine stages, honest defaults
res <- er_run(df, truth = truth_tbl)
res$metrics        # ARI, B-cubed, AMI, ...
res$labels         # cluster per record

# or stage by stage
pairs <- er_block(df, method = "prefix", block_key = "name")
sim   <- er_similarity(df, pairs,
          spec = list(list(name = "name", type = "jw"),
                      list(name = "address", type = "jw")))
S     <- er_pairs_to_sparse(pairs, er_combine(sim), n = nrow(df))
labs  <- er_cluster(S, method = "louvain")

# supervised pairwise classifier (Firth logistic default)
fit <- er_pair_classify(sim, pairs, truth_vec = truth,
                        classifier = "logistic")
fit$valid          # FALSE + reason if structurally inapplicable

Core pipeline

er_run()Run the full entity-resolution pipeline
er_block()Generate candidate pairs via blocking
er_similarity()Compute per-field similarity for all candidate pairs
er_combine()missing-value-aware adaptive weighted similarity combination
er_weights()Learn or select field weights
er_cluster()Run a single clustering method
er_cluster_all()Run all clustering methods
er_merge()Post-process clustering results
er_evaluate()Evaluate clustering against ground truth

Supervised classifiers

er_supervised_classifiers()Names of the 11 supervised pairwise classifiers
er_pair_features()Build the pair-feature matrix from per-field similarities
er_pair_classify()Fit one supervised pairwise classifier

Honest evaluation

er_split()Entity-disjoint (or record-level) CV folds
er_stratified_three_way_split()Entity-disjoint three-way split with positive-pair quotas
er_augment_fit_pairs()Augment positive pairs inside the Fit partition only
er_positive_ratio_report()Per-partition natural-prevalence report
er_tune()Tune ER methods over parameter grids
er_cv()K-fold cross-validation for the pipeline
er_protocol_a()Protocol A: full-data principled parameter selection
er_protocol_b()Protocol B: entity-disjoint CV tune, true held-out evaluation

Studies & baselines

er_ablation_all()Full ablation study: single-run conditions + CV + baselines
er_scaling_curve()Scalability curves by subsampling n
er_stability_ari()Stability via repeated-subsample ARI
er_bcubed()B-cubed precision, recall, and F-score
er_ami()Adjusted mutual information
er_baseline_splink()Splink probabilistic-linkage baseline
er_scenarios()Scenario presets for stress-testing

The Studio engine

The Studio runs engine/ — a pure-Python port of ERBOT's core stages on a serverless function: blocking, missing-value-aware similarity, classification (transitive closure, average-linkage hierarchical clustering, or HDBSCAN), clustering (threshold connected-components, Louvain, Leiden, label propagation, graph coloring, average/Ward hierarchical clustering, PAM, or a supervised pairwise classifier — logistic, lda, qda, knn, wknn, tree, rf, xgboost, nnet, fellegi_sunter, svm_radial — trained on ground truth), and evaluation (ARI, pairwise precision/recall/F1, B-cubed when ground truth is attached). Pairs stream through the pipeline, so million-pair runs stay in budget. It covers the interactive-dedup path; the full R package adds weight learning, consensus merging, multiplex fusion, baselines, and the complete evaluation suite.

Every Studio run shows its equivalent R code — the exact erbot calls that reproduce the result on your own machine.