Methodology
Our Thesis: If a company has significant social risks flagged by AI and a higher EBITDA multiple, lower ROIC, and higher operating risk (Unlevered Beta) relative to peers, then the market is underestimating those social risks and other factors affecting valuation. Alternatively, companies with low social risks, low multiples, high ROIC, and low beta should be promising investment opportunities.
Defining Scope
We chose to focus on the Russell 3000 Index, a comprehensive benchmark that captures roughly 98% of the investable U.S. public equity market. From the outset, we committed to using only publicly available information to ensure both transparency and reproducibility in our process.
Data Extraction
Using Amazon Web Services (AWS), we deployed a workflow centered on an S3 bucket populated with a complete list of Russell 3000 constituents sourced from Bloomberg. A custom-built program using SERP API then executed a specialized query designed to identify unpriced social-harm vectors—potential behavioral or operational patterns that could lead to reputational, regulatory, or financial damage for a company. Each company’s analysis was generated using Gemini, producing a comprehensive text-based risk profile stored within the S3 bucket.
Assessing Risk and creating a Risk Score
Through an EC2 instance connected to a GROQ LLM API, each markdown report was processed to estimate the probability of risk materialization on a 0–100 scale. This step transformed qualitative findings into standardized numerical risk scores, allowing us to compare the relative vulnerability of thousands of companies with a consistent interpretive framework.
Selecting Financial Metrics to Manipulate
We chose to use EV/EBITDA to represent relative valuation because it compares a company’s total EV to its operating earnings before non-cash items. It also controls for differences in capital structure and allows a better comparison between companies than P/E.
We chose to use ROIC to represent quality and efficiency, measuring how effectively a company converts invested capital into profit (after tax).
We chose to use Unlevered Beta to capture business risk independent of their capital structure, and to isolate the company’s exposure to movements of the market based only on its core operations. In short, it's cleaner than levered Beta.
Gathering Financial Data
We pulled financial data for all Russell 300 Companies including:
Market Cap
Weekly Excess returns over 10YR Treasury vs. Weekly Excess Returns of Market Portfolio
Debt and Net Debt
NOPAT
EBITDA
ROIC
We classified each company by GICS Sub-Industry using the first 4 digits to balance specificity and sample size for relative value comparisons
Calculating Enterprise Value
We used EV = Market Cap + Net Debt
Calculating a Valuation Multiple
We computed EV/EBITDA for each company as a measure of relative valuation
Calculating Weekly Return
We computed weekly percent change in company price
We added the Weekly Risk-Free Return (Rf) to the Weekly Market Return (Rm).
We calculated Excess Return as Stock Return minus Rf (we used 10YR Treasury as a proxy)
Calculating Market Variance and Estimating Beta
We calculated the variance of market returns from the Weekly Rm
We estimated Levered Beta for each ticker
Levered Beta = Cov(Ri - Rf, Rm - Rf) / Var(Rm - Rf).
Calculating Unlevered Beta
We did so using Unlevered Beta = Levered Beta / [1 + (1 - Tax Rate) x (Debt/Equity)]
Assumed a 25% tax rate for simplicity
Standardizing Z-Scores relative to other tickers in the same GICS Sub-Industry
Calculated Z-Scores within each sub-industry for EV/EBITDA, ROIC, and Unlevered Beta
Z = (x - mean) / Standard Deviation
When standardizing, we used negative z scores so that a higher score meant the company was worse. This was done to maintain continuity with the AI risk-score, as higher scores indicated greater risks
Unpriced Operating Risk Score = (Negative) Rubric Z-Score minus Unlevered Beta Z-Score
Unpriced Value Score = (Negative) Rubric Z Score - EV/EBITDA Z-Score
Unpriced Quality Score = (Negative) Rubric Z Score plus ROIC Score
Normalizing Scores
Applied max-min scaling:
Score_i = 100 × (x_i – x_min) / (x_max – x_min)
Creating a Composite Financial Score
Composite Score = (Operating Risk Z-Score + Value Z-Score + Quality Z-Score) / 3
Higher scores represent stronger value, profitability, and lower unpriced risk.
Creating a Final Composite Score
We combined the Composite Financial Score with the AI-created Social Risk Score to assign each company a value from 0-100
To create our portfolio, we long the top 100 companies with the highest scores and short the bottom 100 with the lowest scores.