Author: Subir Hait, Michigan State University
Date: 2026-05-19

# Employment AI Bias Audit with AIGovernance

#### Subir Hait, Michigan State University

#### 2026-05-19

> Disclaimer: `AIGovernance` provides statistical auditing and documentation support tools only. It does not provide legal advice and does not certify compliance with any law or regulation. Users should seek qualified legal counsel for all compliance determinations.

## Overview

`AIGovernance` helps organisations document, audit, and report on the fairness and governance properties of employment AI systems — specifically Automated Employment Decision Tools (AEDTs). Version 0.1.0 covers three frameworks:

Framework | Jurisdiction | Nature
--- | --- | ---
EEOC Uniform Guidelines (4/5ths rule) | US Federal | Regulatory
NYC Local Law 144 | New York City | Mandatory (employers using AEDTs)
NIST AI RMF 1.0 | US Federal | Voluntary / best practice
EU AI Act (risk classification only) | European Union | Regulatory

## 1. Load Package and Data

    library(AIGovernance)

    data(hiring_sim)
    head(hiring_sim)
    #>   applicant_id race_ethnicity gender years_experience score selected
    #> 1            1       Hispanic   Male              8.5 100.0        0
    #> 2            2          Black Female              6.0  83.8        1
    #> 3            3          White Female              4.1  85.4        0
    #> 4            4          White   Male              9.0  84.8        0
    #> 5            5          Black   Male              4.9  81.3        0
    #> 6            6          White   Male              4.4  63.2        1

The built-in `hiring_sim` dataset contains 500 synthetic job applicants processed by a hypothetical resume-screening tool.

    table(hiring_sim$race_ethnicity, hiring_sim$selected)
    #>
    #>              0   1
    #>   Asian     39  21
    #>   Black     75  29
    #>   Hispanic  63  23
    #>   Other     15   5
    #>   White    121 109

## 2. Build the Governance Object

`aigov_build()` is the entry point. Specify the data, binary outcome, protected-class column, and reference group.

    gov <- aigov_build(
      data        = hiring_sim,
      outcome     = selected,
      group       = race_ethnicity,
      ref_group   = "White",
      frameworks  = c("EEOC", "NYC_LL144", "NIST_RMF"),
      org_name    = "Acme Corporation",
      system_name = "ResumeAI v1.0"
    )
    #> ✔ AIGovernance object built: 500 records,
    #> ℹ Disclaimer: AIGovernance is a statistical support tool.

    print(gov)
    #>
    #> ── AIGovernance Audit Object ───────────────────────────────────────────────────
    #> • Organisation : Acme Corporation
    #> • AI system : ResumeAI v1.0
    #> • Audit date : 2026-05-19
    #> • Records : 500
    #> • Outcome col : selected
    #> • Group col : race_ethnicity (5 levels)
    #> • Ref group : White
    #> • Frameworks : EEOC, NYC_LL144, NIST_RMF
    #> ℹ No audit modules run yet. Call aigov_adverse_impact(), aigov_audit_nyc(), etc.

## 3. Check Which Laws Apply

    aigov_scope(gov, domain = "employment", us_state = "NY")
    #>
    #> ── Governance Scope — Applicable Frameworks ──
    #>
    #>   ✔ APPLIES | EEOC Uniform Guidelines (4/5ths rule)
    #>   ✔ APPLIES | NYC Local Law 144 (LL144)
    #>   ✔ APPLIES | NIST AI RMF 1.0
    #>   ✔ APPLIES | EU AI Act — High Risk (Annex III)
    #>   ✔ APPLIES | GDPR Article 22
    #>   ✘ NOT APPLICABLE | Colorado AI Act (SB 205)
    #>   ✘ NOT APPLICABLE | Illinois AI Video Interview Act
    #>   ✘ NOT APPLICABLE | ECOA / Regulation B

## 4. EEOC Adverse Impact Analysis (4/5ths Rule)

    gov <- aigov_adverse_impact(gov)
    #>
    #> ── EEOC Adverse Impact (4/5ths Rule) ──
    #>
    #> # A tibble: 5 × 8
    #>   group        n n_selected selection_rate   AIR fourfifths_flag   p_value
    #>   <chr>    <int>      <int>          <dbl> <dbl> <lgl>               <dbl>
    #> 1 Asian       60         21          0.35  0.739 TRUE             0.0857
    #> 2 Black      104         29          0.279 0.588 TRUE             0.000801
    #> 3 Hispanic    86         23          0.267 0.564 TRUE             0.000926
    #> 4 Other       20          5          0.25  0.528 TRUE             0.0538
    #> 5 White      230        109          0.474 1     FALSE           NA
    #> # ℹ 1 more variable: small_n_flag <lgl>
    #> ✖ Result: FAIL — 4 group(s) flagged (AIR < 0.80).
    #> ! Small sample warning: groups "Other" have n < 30.
    #> ℹ Disclaimer: The 4/5ths rule is a statistical rule of thumb.
    gov$results$adverse_impact$table
    #> # A tibble: 5 × 10
    #>   group        n n_selected selection_rate   AIR fourfifths_flag small_n_flag
    #>   <chr>    <int>      <int>          <dbl> <dbl> <lgl>           <lgl>
    #> 1 Asian       60         21          0.35  0.739 TRUE            FALSE
    #> 2 Black      104         29          0.279 0.588 TRUE            FALSE
    #> 3 Hispanic    86         23          0.267 0.564 TRUE            FALSE
    #> 4 Other       20          5          0.25  0.528 TRUE            TRUE
    #> 5 White      230        109          0.474 1     FALSE           FALSE
    #> # ℹ 3 more variables: z_stat <dbl>, p_value <dbl>, fisher_p <dbl>

The Adverse Impact Ratio (AIR) compares each group’s selection rate to the reference group (White). Groups with AIR < 0.80 are flagged under the EEOC 4/5ths rule.

## 5. NYC Local Law 144 Bias Audit

NYC LL144 uses a slightly different denominator — the most-selected category — rather than a user-defined reference group.

    gov <- aigov_audit_nyc(gov)
    #>
    #> ── NYC Local Law 144 — Bias Audit Results ──
    #>
    #> • Reference category (most selected): "White"
    #> • Reference selection rate: 0.4739
    #> # A tibble: 5 × 6
    #>   Category `Total Assessed` `Number Selected` `Selection Rate` `Impact Ratio`
    #>   <chr>               <int>             <int>            <dbl>          <dbl>
    #> 1 Asian                  60                21            0.35           0.738
    #> 2 Black                 104                29            0.279          0.588
    #> 3 Hispanic               86                23            0.267          0.564
    #> 4 Other                  20                 5            0.25           0.528
    #> 5 White                 230               109            0.474          1
    #> # ℹ 1 more variable: `Flagged (IR < 0.80)` <lgl>
    #> ✖ Statistical result: REVIEW — 4 category(ies) with IR < 0.80.
    #>
    #> ── Procedural Checklist (NA = requires employer confirmation)
    #>   ✔ Annual bias audit conducted
    #>   ? Audit performed prior to AEDT use or within 1 year
    #>   ✔ Impact ratios computed for all categories
    #>   ? Audit results published on employer website
    #>   ? Publication includes audit date
    #>   ? Publication includes distribution date of AEDT
    #>   ? Candidate/employee notice provided (10 days prior)
    #>   ? Notice includes AEDT purpose and data collected
    #>   ? Accommodation process documented for candidates
    #>   ? Audit conducted by independent auditor
    #> ℹ Disclaimer: This output is a statistical support tool.
    gov$results$nyc_ll144$disclosure_table
    #> # A tibble: 5 × 6
    #>   Category `Total Assessed` `Number Selected` `Selection Rate` `Impact Ratio`
    #>   <chr>               <int>             <int>            <dbl>          <dbl>
    #> 1 Asian                  60                21            0.35           0.738
    #> 2 Black                 104                29            0.279          0.588
    #> 3 Hispanic               86                23            0.267          0.564
    #> 4 Other                  20                 5            0.25           0.528
    #> 5 White                 230               109            0.474          1
    #> # ℹ 1 more variable: `Flagged (IR < 0.80)` <lgl>

The disclosure table is formatted to match the public posting requirements under NYC LL144.

## 6. NIST AI RMF Checklist

Supply your organisation’s confirmed governance practices as a named list:

    gov <- aigov_audit_nist(gov, responses = list(
      GOVERN_1_1 = TRUE,   # Risk policy documented
      GOVERN_1_2 = TRUE,   # Roles defined
      GOVERN_1_3 = FALSE,  # Leadership oversight not yet formalised
      MAP_1_1    = TRUE,   # System purpose documented
      MAP_1_2    = TRUE,   # Affected populations identified
      MAP_1_3    = TRUE,   # Regulatory requirements identified
      MAP_2_1    = TRUE,   # Harms identified
      MEASURE_1_1 = TRUE,  # Fairness metrics defined
      MANAGE_2_1  = FALSE  # Human review not yet in place
    ))
    #>
    #> ── NIST AI RMF 1.0 — Employment AI Audit ──
    #>
    #> # A tibble: 4 × 3
    #>   Function Score Status
    #>   <chr>    <dbl> <chr>
    #> 1 GOVERN    0.29 RED
    #> 2 MAP       0.57 AMBER
    #> 3 MEASURE   0.25 RED
    #> 4 MANAGE    0    RED
    #> • Overall score: 0.28 — RED
    #> ✖ NIST RMF: RED — Significant governance gaps identified.
    #> ℹ Supply `responses` list to `aigov_audit_nist()` to record

    gov$results$nist_rmf$scores
    #>    GOVERN       MAP   MEASURE    MANAGE
    #> 0.2857143 0.5714286 0.2500000 0.0000000
    gov$results$nist_rmf$verdict
    #> [1] "RED"

Use `aigov_checklist(gov, "NIST_RMF")` to see all item names.

## 7. Risk Classification

    gov <- aigov_classify(
      gov,
      domain               = "employment",
      makes_final_decision = TRUE,
      human_oversight      = FALSE
    )
    #>
    #> ── AI System Risk Classification ──
    #>
    #> • Domain : employment
    #> • Makes final decision : TRUE
    #>
    #> ── EU AI Act
    #> • Risk tier : HIGH RISK
    #> • Annex basis : Annex III, Point 4 — Employment, workers management, and access
    #>   to self-employment
    #> ℹ Key obligations:
    #>   Art. 9 — Risk management system (documented, ongoing)
    #>   Art. 10 — Data governance and training data requirements
    #>   Art. 11 — Technical documentation (before market placement)
    #>   Art. 13 — Transparency and provision of information to deployers
    #>   Art. 14 — Human oversight measures
    #>   Art. 15 — Accuracy, robustness, and cybersecurity
    #>   Art. 43 — Conformity assessment
    #>   Art. 49 — Registration in EU AI database
    #>
    #> ── NIST AI RMF
    #> • Tier 3 — Significant impact on individuals' rights and opportunities
    #> ✖ Human oversight: NOT IN PLACE — HIGH PRIORITY gap for EU Art. 14 and EEOC.

Employment AI that makes or substantially influences hiring decisions falls under Annex III (High Risk) of the EU AI Act.

## 8. Generate an Audit Report

    # Produces a self-contained HTML report
    aigov_report(gov, format = "html", open = TRUE)

The report includes:

- Organisation and system metadata
- EEOC adverse impact table with AIR values
- NYC LL144 disclosure table and procedural checklist
- NIST AI RMF function scores
- EU AI Act risk tier and key obligations
- Full disclaimer

## 9. Checklist Reference

    aigov_checklist(gov, "NYC_LL144")
    #>
    #> ── Checklist: NYC_LL144 ──
    #>
    #> # A tibble: 10 × 4
    #>    item_id  function_area     description                                 status
    #>    <chr>    <chr>             <chr>                                       <chr>
    #>  1 LL144_1  NYC Local Law 144 Annual bias audit has been conducted        Compl…
    #>  2 LL144_2  NYC Local Law 144 Audit was performed before AEDT use or wit… Pendi…
    #>  3 LL144_3  NYC Local Law 144 Impact ratios computed for each race/ethni… Compl…
    #>  4 LL144_4  NYC Local Law 144 Impact ratios computed for each sex catego… Pendi…
    #>  5 LL144_5  NYC Local Law 144 Audit results published on employer website Pendi…
    #>  6 LL144_6  NYC Local Law 144 Publication includes the date of the audit  Pendi…
    #>  7 LL144_7  NYC Local Law 144 Publication includes the distribution date… Pendi…
    #>  8 LL144_8  NYC Local Law 144 Candidates/employees notified at least 10 … Pendi…
    #>  9 LL144_9  NYC Local Law 144 Notice describes AEDT type and data/criter… Pendi…
    #> 10 LL144_10 NYC Local Law 144 Audit was conducted by an independent audi… Pendi…

## References

- EEOC (1978). Uniform Guidelines on Employee Selection Procedures. Federal Register, 43(166), 38295–38309.
- New York City Local Law 144 (2021, effective 2023). NYC DCWP. https://www.nyc.gov/site/dca/about/automated-employment-decision-tools.page
- NIST (2023). AI Risk Management Framework (AI RMF 1.0). https://doi.org/10.6028/NIST.AI.100-1
- European Parliament and Council (2024). Regulation (EU) 2024/1689 (EU AI Act). https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai