Alpha Delta Pi recruitment

Overview

During the three-week recruitment period, I supported our chapter by analyzing member votes and matching potential new members to ensure the best fit. This project required balancing detailed data analysis with leadership responsibilities, including managing a recruitment team and coordinating with a chapter of over 100 members. Our goal was to make strategic, data-informed decisions that would strengthen the chapter's future.

My role

I collected, cleaned, and analyzed recruitment data to standardize votes across members, ensuring fair evaluation of all candidates. I developed an R script to handle vote standardization and ranking - never done for our chapter before - identifying patterns of consistently high or low voting. Beyond data analysis, I led a recruitment team and managed communication with the full chapter and advisors, fostering respect, confidence, and comfort in a high-stakes environment.

Methodology: standardizing votes with z-scores

Raw vote totals are misleading in a recruitment context - some members rate almost everyone a 9 or 10, while others are more discerning and reserve high scores for standouts. To make every member's vote comparable, I wrote an R script that re-centers each voter's scores around their own personal average and scales them by their own personal spread (a z-score). A member who consistently scores high gets pulled toward neutral, since a high score is normal for them, while a rare high score from a more critical voter carries much more weight, since it stands out against their usual pattern.

# compute global mean and SD as a fallback for single-vote authors
global_avg <- mean(df$Value, na.rm = TRUE)
global_sd  <- sd(df$Value,   na.rm = TRUE)

df_standardized <- df %>%
  # each voter's personal average, spread, and vote count
  group_by(Author) %>%
  mutate(
    author_avg   = mean(Value, na.rm = TRUE),
    author_sd    = sd(Value,   na.rm = TRUE),
    author_votes = n()
  ) %>%
  ungroup() %>%

  # standardize against personal stats, falling back to the whole
  # chapter's average/spread for single-vote or zero-spread voters
  mutate(
    use_avg = ifelse(author_votes > 1 & author_sd > 0, author_avg, global_avg),
    use_sd  = ifelse(author_votes > 1 & author_sd > 0, author_sd,  global_sd),
    standardized_value = (Value - use_avg) / use_sd
  ) %>%

  # each PNM's final score is the average of everyone's standardized votes
  group_by(PNM.First.Name, PNM.Last.Name) %>%
  mutate(
    num_votes              = n(),
    avg_standardized_score = mean(standardized_value, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  arrange(PNM.ID)

Core standardization logic from StandardizeScores.Rmd - full script linked below.

The script also chains scores across multiple recruitment rounds (open invite, philanthropy, sisterhood, preference) into a single running file, labeling each round's scores separately so nothing gets overwritten as the chapter moves through the recruitment period.

Skills demonstrated

Data Cleaning R Programming Statistical Standardization Leadership Strategic Decision Making

Deliverables