Skip to content
Vega-Lite templates

Bias audit — selection-rate impact ratios (four-fifths rule)

Selection rate and impact ratio by sex and race/ethnicity for an automated employment decision tool against the 0.80 four-fifths threshold, the disparate-impact table required by NYC Local Law 144 and the EEOC Uniform Guidelines.

Template previewVega-Lite
Rendering…

Make it your own.

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "title": {
    "text": "Bias audit — CV screening assistant, impact ratios (NYC Local Law 144)",
    "subtitle": [
      "Selection = model recommends \"advance to interview\". 3 947 applicants, 984 advanced, overall selection rate 24.9%.",
      "Impact ratio = category selection rate ÷ the highest selection rate in that category set. Rule at 0.80 is the four-fifths threshold.",
      "Four race/ethnicity categories fall below 0.80; the two smallest (n < 50) are reported but not adverse-impact conclusive."
    ],
    "anchor": "start",
    "fontSize": 15,
    "subtitleFontSize": 11
  },
  "data": {
    "values": [
      {"dimension": "Sex", "category": "Male", "applicants": 1842, "selected": 486, "selection_rate": 0.2638, "impact_ratio": 1.0, "status": "reference"},
      {"dimension": "Sex", "category": "Female", "applicants": 2105, "selected": 498, "selection_rate": 0.2366, "impact_ratio": 0.897, "status": "at or above 0.80"},
      {"dimension": "Race / ethnicity", "category": "Asian", "applicants": 830, "selected": 246, "selection_rate": 0.2964, "impact_ratio": 1.0, "status": "reference"},
      {"dimension": "Race / ethnicity", "category": "White", "applicants": 1540, "selected": 398, "selection_rate": 0.2584, "impact_ratio": 0.872, "status": "at or above 0.80"},
      {"dimension": "Race / ethnicity", "category": "Two or more races", "applicants": 180, "selected": 44, "selection_rate": 0.2444, "impact_ratio": 0.825, "status": "at or above 0.80"},
      {"dimension": "Race / ethnicity", "category": "Black or African American", "applicants": 690, "selected": 148, "selection_rate": 0.2145, "impact_ratio": 0.724, "status": "below 0.80"},
      {"dimension": "Race / ethnicity", "category": "Hispanic or Latino", "applicants": 620, "selected": 131, "selection_rate": 0.2113, "impact_ratio": 0.713, "status": "below 0.80"},
      {"dimension": "Race / ethnicity", "category": "Native Hawaiian or Pacific Islander", "applicants": 45, "selected": 9, "selection_rate": 0.2, "impact_ratio": 0.675, "status": "below 0.80"},
      {"dimension": "Race / ethnicity", "category": "American Indian or Alaska Native", "applicants": 42, "selected": 8, "selection_rate": 0.1905, "impact_ratio": 0.643, "status": "below 0.80"}
    ]
  },
  "facet": {
    "row": {
      "field": "dimension",
      "type": "nominal",
      "title": null,
      "header": {"labelFontSize": 12, "labelFontWeight": "bold", "labelAnchor": "start"},
      "sort": ["Sex", "Race / ethnicity"]
    }
  },
  "resolve": {"scale": {"y": "independent"}},
  "spec": {
    "width": 380,
    "height": {"step": 24},
    "layer": [
      {
        "mark": {"type": "bar", "height": 15},
        "encoding": {
          "y": {
            "field": "category",
            "type": "nominal",
            "title": null,
            "sort": ["Male", "Female", "Asian", "White", "Two or more races", "Black or African American", "Hispanic or Latino", "Native Hawaiian or Pacific Islander", "American Indian or Alaska Native"],
            "axis": {"labelLimit": 320}
          },
          "x": {
            "field": "impact_ratio",
            "type": "quantitative",
            "title": "Impact ratio",
            "scale": {"domain": [0, 1.05]},
            "axis": {"format": ".2f"}
          },
          "color": {
            "field": "status",
            "type": "nominal",
            "title": "Four-fifths test",
            "scale": {
              "domain": ["reference", "at or above 0.80", "below 0.80"],
              "range": ["#5b6470", "#1f47f5", "#c62828"]
            }
          },
          "tooltip": [
            {"field": "category", "type": "nominal"},
            {"field": "applicants", "type": "quantitative", "title": "Applicants"},
            {"field": "selected", "type": "quantitative", "title": "Advanced"},
            {"field": "selection_rate", "type": "quantitative", "title": "Selection rate", "format": ".1%"},
            {"field": "impact_ratio", "type": "quantitative", "title": "Impact ratio", "format": ".3f"}
          ]
        }
      },
      {
        "mark": {"type": "rule", "color": "#333333", "strokeDash": [4, 3], "strokeWidth": 1.5},
        "encoding": {"x": {"datum": 0.8, "type": "quantitative"}}
      },
      {
        "mark": {"type": "text", "align": "left", "dx": 5, "fontSize": 10, "color": "#333333"},
        "encoding": {
          "y": {
            "field": "category",
            "type": "nominal",
            "sort": ["Male", "Female", "Asian", "White", "Two or more races", "Black or African American", "Hispanic or Latino", "Native Hawaiian or Pacific Islander", "American Indian or Alaska Native"],
            "axis": {"labelLimit": 320}
          },
          "x": {"field": "impact_ratio", "type": "quantitative"},
          "text": {"field": "label", "type": "nominal"}
        }
      }
    ]
  },
  "transform": [
    {
      "calculate": "format(datum.impact_ratio, '.3f') + '  (' + format(datum.selection_rate, '.1%') + ', n=' + datum.applicants + ')'",
      "as": "label"
    }
  ],
  "config": {
    "view": {"stroke": null},
    "axis": {"labelFontSize": 11, "titleFontSize": 12}
  }
}