**Dataset**: model249
**Region**: EUR
**Delay**: 1

# Acquisition Likelihood Dataset (model249) Feature Engineering Analysis Report

**Dataset**: model249
**Category**: Model
**Region**: EUR
**Analysis Date**: 2024-01-15
**Fields Analyzed**: 7

---

## Executive Summary

**Primary Question Answered by Dataset**: What is the probability that a given stock will receive a tender offer (acquisition bid) within the next 12 months, and how does this likelihood compare to historical patterns and sector norms?

**Key Insights from Analysis**:
- The dataset provides a forward-looking probability estimate rather than historical accounting data, making temporal dynamics (changes in likelihood) as important as absolute levels
- Model confidence is a critical meta-feature that determines the reliability of predictions
- Acquisition likelihood exhibits sector clustering (certain industries have higher baseline M&A activity), requiring relative value calculations
- The 12-month horizon implies mean-reversion and decay effects should be modeled explicitly
- Rank-based features may be more stable than raw scores due to the ordinal nature of M&A predictions

**Critical Field Relationships Identified**:
- Raw score vs. probability mapping: The relationship between the model's internal score and calibrated probability reveals prediction certainty
- Score vs. rank consistency: Divergences between absolute score levels and relative rankings indicate changing competitive dynamics or sector shifts
- Current vs. historical baseline: The spread between current likelihood and long-term average indicates regime changes in M&A activity

**Most Promising Feature Concepts**:
1. **Confidence-Weighted Momentum** - because high-confidence changes in acquisition likelihood are more actionable than low-confidence noise
2. **Sector-Neutral Likelihood Deviation** - because acquisition activity is highly sector-dependent; deviation from sector norms captures idiosyncratic takeover vulnerability
3. **Score-Rank Divergence** - because discrepancies between absolute scores and relative rankings reveal potential mispricings in the model's output

---

## Dataset Deep Understanding

### Dataset Description
The Acquisition Likelihood Estimate Ranking Tool (ALERT) is a predictive model dataset that quantifies the probability of stocks receiving tender offers within a 12-month forward window. Unlike fundamental data that describes what has happened, this model dataset projects future corporate events based on patterns in market microstructure, ownership concentration, governance characteristics, valuation metrics, and historical M&A precedents. The dataset ranks stocks within the EUR region universe (TOPCS1600) to identify the most likely takeover targets.

### Field Inventory
| Field ID | Description | Data Type | Update Frequency | Coverage |
|----------|-------------|-----------|------------------|----------|
| alert_score | Raw acquisition likelihood score (0-100 scale) | Float | Daily | 98% |
| alert_rank | Ordinal rank within universe (1 = highest likelihood) | Integer | Daily | 98% |
| alert_prob | Calibrated probability of acquisition (0-1) | Float | Daily | 95% |
| alert_chg | 20-day change in acquisition score | Float | Daily | 94% |
| alert_conf | Model confidence metric (0-1) | Float | Daily | 100% |
| alert_sector_z | Sector-normalized z-score of likelihood | Float | Daily | 97% |
| alert_hist_ratio | Current score vs 1-year historical average | Float | Daily | 92% |

*(Additional fields as needed)*

### Field Deconstruction Analysis

#### alert_score: Raw Acquisition Likelihood Score
- **What is being measured?**: The model's composite assessment of takeover vulnerability based on financial metrics, ownership structure, market conditions, and historical precedents
- **How is it measured?**: Machine learning ensemble processing of fundamental, technical, and alternative data inputs calibrated against historical M&A outcomes
- **Time dimension**: Point-in-time estimate with 12-month forward looking horizon
- **Business context**: Identifies potential acquisition targets for event-driven strategies and risk management (avoiding potential short targets that might get acquired)
- **Generation logic**: Proprietary algorithm combining company-specific factors (undervaluation, cash reserves, governance weakness) with market-wide M&A activity cycles
- **Reliability considerations**: May exhibit regime shifts during periods of low M&A activity; scores are relative to current market conditions rather than absolute probabilities

#### alert_rank: Acquisition Likelihood Rank
- **What is being measured?**: Relative positioning of a stock's takeover likelihood compared to all other stocks in the universe
- **How is it measured?**: Ordinal ranking of alert_score across the TOPCS1600 universe
- **Time dimension**: Daily snapshot of relative positioning
- **Business context**: Useful for portfolio construction (long top decile, short bottom decile) and position sizing relative to peer group
- **Generation logic**: Derived directly from alert_score ranking; handles ties through secondary criteria
- **Reliability considerations**: More stable than raw scores during market turbulence; rank changes indicate relative attractiveness shifts even if absolute M&A probability is low across all stocks

#### alert_prob: Calibrated Probability
- **What is being measured?**: Statistical probability of receiving a tender offer within 12 months, calibrated to historical base rates
- **How is it measured?**: Platt scaling or isotonic regression applied to alert_score to convert to true probability estimates
- **Time dimension**: 12-month forward-looking cumulative probability
- **Business context**: Direct input for expected return calculations; can be multiplied by potential acquisition premium to estimate expected value
- **Generation logic**: Calibration layer that maps model scores to actual historical hit rates (e.g., score of 80 historically corresponds to 15% actual acquisition rate)
- **Reliability considerations**: Calibration may drift in regimes with structurally different M&A activity levels; less reliable at extremes (very high or low scores) due to sparse data

#### alert_chg: Score Change (20-day)
- **What is being measured?**: Recent momentum in acquisition likelihood score
- **How is it measured?**: Difference between current alert_score and score 20 trading days prior
- **Time dimension**: Rate of change over 1-month period
- **Business context**: Captures emerging takeover rumors, changing fundamentals, or shifting market conditions that increase target attractiveness
- **Generation logic**: Simple delta calculation with backfill for missing data points
- **Reliability considerations**: Sensitive to model updates or recalibrations; sudden changes may reflect data corrections rather than genuine signal changes

#### alert_conf: Model Confidence
- **What is being measured?**: The model's certainty in its prediction based on input data quality and similarity to training examples
- **How is it measured?**: Inverse of prediction variance or distance from decision boundary in ensemble models
- **Time dimension**: Point-in-time confidence metric
- **Business context**: Determines position sizing; high confidence + high score = stronger conviction; flags potential data anomalies when confidence drops suddenly
- **Generation logic**: Typically derived from ensemble disagreement or distance to training set centroids
- **Reliability considerations**: May be overconfident for out-of-sample regimes (e.g., new industry structures); should be monitored for sudden drops indicating model degradation

#### alert_sector_z: Sector-Normalized Z-Score
- **What is being measured?**: How many standard deviations a stock's acquisition likelihood is from its sector mean
- **How is it measured?**: (alert_score - sector_mean) / sector_std_dev
- **Time dimension**: Cross-sectional calculation updated daily
- **Business context**: Identifies sector-specific takeover targets; some sectors naturally have higher M&A activity (tech, biotech) so absolute scores are less meaningful than relative ones
- **Generation logic**: Dynamic sector classification with rolling window statistics (typically 90-day lookback)
- **Reliability considerations**: Sector definitions may be ambiguous for conglomerates; small sectors may have unstable standard deviations

#### alert_hist_ratio: Historical Ratio
- **What is being measured?**: Current acquisition likelihood relative to the stock's own 1-year historical average
- **How is it measured?**: alert_score / ts_mean(alert_score, 252)
- **Time dimension**: Relative to 12-month historical baseline
- **Business context**: Identifies stocks experiencing sudden increases in acquisition vulnerability compared to their own history
- **Generation logic**: Rolling window calculation with minimum data requirements (e.g., require 100 days of history)
- **Reliability considerations**: IPOs and recent listings will have limited history; historical averages may be biased by recent M&A cycles

### Field Relationship Mapping

**The Story This Data Tells**:
The dataset narrates the evolving landscape of corporate control vulnerability within the European equity market. Each stock carries a baseline propensity for acquisition (alert_score) that fluctuates based on corporate actions, market movements, and strategic shifts. The model confidence (alert_conf) acts as a narrator's reliability indicator—sometimes certain, sometimes uncertain. The relationship between raw scores (alert_score) and calibrated probabilities (alert_prob) reveals whether the current market environment is typical or unusual. Changes in rank (alert_rank) versus changes in absolute scores tell us whether a stock is becoming more acquisition-prone in absolute terms or merely relative to peers. The sector normalization (alert_sector_z) separates industry-wide consolidation waves from company-specific vulnerabilities. Together, these fields trace the trajectory of corporate control risk through time and cross-section.

**Key Relationships Identified**:
1. **Score-Probability Calibration Curve**: alert_prob is a non-linear transformation of alert_score; the curvature indicates base rates (low scores map to near-zero probability, high scores to 10-20% probability typically)
2. **Confidence-Score Inverse Relationship**: Often, extreme scores (very high or very low) come with lower confidence due to limited training examples at extremes
3. **Sector Clustering**: alert_sector_z and alert_rank move together during sector-specific M&A waves but diverge during market-wide risk-on/risk-off environments
4. **Change Persistence**: alert_chg tends to persist for 5-10 days (momentum) then mean-reverts, suggesting information diffusion patterns in M&A rumors

**Missing Pieces That Would Complete the Picture**:
- Time since last rumor/speculation (to distinguish new vs. old signals)
- Potential acquirer availability (cash-rich strategic buyers in the sector)
- Regulatory approval likelihood (antitrust constraints specific to each stock)
- Historical acquisition premium sizes (expected return conditional on acquisition)

---

## Feature Concepts by Question Type

### Q1: "What is stable?" (Invariance Features)

**Concept**: Score Volatility Regime
- **Sample Fields Used**: alert_score
- **Definition**: Rolling standard deviation of acquisition likelihood score over 60 trading days
- **Why This Feature**: Stable acquisition likelihood (low volatility) suggests persistent structural characteristics (e.g., perpetual undervaluation, stable ownership), while high volatility suggests event-driven uncertainty or model instability
- **Logical Meaning**: Measures the consistency of the model's assessment; low values indicate "steady state" takeover targets, high values indicate transitional states
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. For score volatility, NaNs typically indicate missing data rather than meaningful signals, so ts_backfill is appropriate.
- **Directionality**: High values indicate uncertainty/unstable prediction environment (potentially avoid); Low values indicate stable prediction (higher conviction in persistence)
- **Boundary Conditions**: Near-zero values suggest the model is stuck or the stock is in steady state; extremely high values suggest corporate events or data issues
- **Implementation Example**: `ts_std_dev({alert_score}, 60)`

**Concept**: Rank Autocorrelation Stability
- **Sample Fields Used**: alert_rank
- **Definition**: Correlation between current rank and rank 20 days ago, measured over 40-day rolling windows
- **Why This Feature**: Persistent rankings indicate structural takeover vulnerability, while rapidly changing rankings suggest temporary factors or noise; high autocorrelation stocks are better candidates for long-term holding
- **Logical Meaning**: Captures the "stickiness" of acquisition likelihood; persistent ranks suggest fundamental characteristics, fleeting ranks suggest transient market noise
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Rank changes are meaningful (dropping out of coverage), so NaNs should not be backfilled blindly; use only if confirmed as data error.
- **Directionality**: High values (near 1.0) indicate stable relative positioning (persistent targets); Low values indicate rank instability (avoid for position trades)
- **Boundary Conditions**: Negative values indicate mean-reversion in rankings (unusual, worth investigation); Values >0.9 indicate extremely persistent predictions
- **Implementation Example**: `ts_corr({alert_rank}, ts_delay({alert_rank}, 20), 40)`

---

### Q2: "What is changing?" (Dynamics Features)

**Concept**: Acceleration of Likelihood
- **Sample Fields Used**: alert_score
- **Definition**: Second derivative of acquisition score (change of change) over 20-day periods
- **Why This Feature**: First derivative (alert_chg) captures momentum; second derivative captures whether takeover interest is accelerating or decelerating. Accelerating stocks may be approaching a catalyst.
- **Logical Meaning**: Rate of change in the rate of change; positive values indicate increasing momentum (rumors heating up), negative values indicate cooling off
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Missing values in time series should be backfilled to maintain continuity of acceleration calculation.
- **Directionality**: Positive values indicate accelerating takeover probability (early entry); Negative values indicate decelerating probability (consider exit)
- **Boundary Conditions**: Extreme positive values may indicate data jumps or model recalibrations rather than genuine signal; Zero indicates steady linear trend
- **Implementation Example**: `ts_delta({alert_score}, 20) - ts_delta(ts_delay({alert_score}, 20), 20)`

**Concept**: Probability Trajectory Slope
- **Sample Fields Used**: alert_prob
- **Definition**: Theil-Sen slope estimator of calibrated probability over 60 days (robust to outliers)
- **Why This Feature**: Linear trend in true probability space is more interpretable than raw score changes; robust regression avoids single-day spikes distorting the trend
- **Logical Meaning**: Underlying directional trend in acquisition probability, cleaned of daily noise; captures sustained increases in vulnerability
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Probability values should be continuous; use ts_backfill for gaps up to 5 days.
- **Directionality**: Positive slope indicates rising takeover probability (bullish for long positions); Negative slope indicates fading probability
- **Boundary Conditions**: Slope >0.01/day implies very rapid increase (investigate for rumors); Flat slope (near 0) indicates stable probability
- **Implementation Example**: `ts_theilsen(ts_step(1), {alert_prob}, 60)`

---

### Q3: "What is anomalous?" (Deviation Features)

**Concept**: Confidence-Adjusted Z-Score
- **Sample Fields Used**: alert_score, alert_conf
- **Definition**: Deviation of current score from historical mean, weighted by model confidence (high confidence anomalies weighted more heavily)
- **Why This Feature**: Raw z-scores treat all deviations equally; weighting by confidence ensures we only flag anomalies when the model is certain, avoiding false positives from uncertain predictions
- **Logical Meaning**: Statistically significant deviations in acquisition likelihood that the model views with high certainty; flags potential takeover rumors or corporate events
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. NaN in confidence implies zero confidence; replace with 0 to weight anomaly as zero importance.
- **Directionality**: High positive values indicate unusual spike in acquisition likelihood (potential imminent announcement); High negative values indicate unusual drop (perhaps acquisition off the table)
- **Boundary Conditions**: Values >3.0 indicate extreme outliers (verify data quality); Values between -1 and 1 indicate normal variation
- **Implementation Example**: `(({alert_score} - ts_mean({alert_score}, 60)) / ts_std_dev({alert_score}, 60)) * {alert_conf}`

**Concept**: Historical Baseline Deviation
- **Sample Fields Used**: alert_score, alert_hist_ratio
- **Definition**: Current score distance from 1-year historical percentile (where does current score rank vs last 252 days)
- **Why This Feature**: Identifies stocks experiencing unprecedented levels of acquisition likelihood compared to their own history, suggesting structural breaks or emerging vulnerability
- **Logical Meaning**: Contextualizes current likelihood within historical range; 95th percentile means highest likelihood in a year regardless of absolute level
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Historical percentiles require full history; backfill only if stock has sufficient history (>100 days).
- **Directionality**: High values (near 100) indicate historically high takeover likelihood (strong signal); Low values indicate historically low likelihood (safe from acquisition)
- **Boundary Conditions**: Near 0 or 100 indicates extremes; sudden jumps from 50 to 95 indicate rapid regime change
- **Implementation Example**: `ts_percentage({alert_score}, 252, 0.95) - ts_percentage({alert_score}, 252, 0.05)`

---

### Q4: "What is combined?" (Interaction Features)

**Concept**: Confidence-Weighted Momentum
- **Sample Fields Used**: alert_chg, alert_conf
- **Definition**: Recent change in score multiplied by model confidence, normalized by historical volatility of changes
- **Why This Feature**: Combines three dimensions: direction (change), certainty (confidence), and scale (volatility adjustment). High confidence + large change = strong signal.
- **Logical Meaning**: Risk-adjusted momentum in acquisition likelihood; represents the most reliable changes in takeover probability
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Missing confidence should default to 0 (no weight); missing changes should not be filled (no signal).
- **Directionality**: High positive values indicate high-conviction increase in likelihood (strong buy signal); High negative values indicate high-conviction decrease (strong sell/avoid)
- **Boundary Conditions**: Values near 0 indicate either no change or uncertain change; Extreme values (>2 std dev) warrant investigation for data errors
- **Implementation Example**: `({alert_chg} * {alert_conf}) / ts_std_dev({alert_chg}, 60)`

**Concept**: Score-Rank Divergence
- **Sample Fields Used**: alert_score, alert_rank
- **Definition**: Residual from regression of score on inverse rank (identifies stocks where score is higher/lower than rank would predict)
- **Why This Feature**: In efficient ranking systems, score and rank should align; divergence indicates potential model inconsistency or non-linear effects (e.g., all top 10 have similar high scores, but #11 has much lower score)
- **Logical Meaning**: Measures the "gap" between absolute likelihood and relative positioning; positive divergence means higher score than peers with similar ranks (potential misclassification)
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Use cross-sectional fill only if universe coverage is complete; otherwise preserve NaN for missing stocks.
- **Directionality**: Positive values indicate score > rank prediction (potentially under-ranked, opportunity); Negative values indicate over-ranked relative to score
- **Boundary Conditions**: Extreme residuals (>3 std dev) suggest data errors or special situations (e.g., pending deals)
- **Implementation Example**: `regression_neut({alert_score}, 101 - {alert_rank})`

---

### Q5: "What is structural?" (Composition Features)

**Concept**: Sector-Neutral Likelihood
- **Sample Fields Used**: alert_score, alert_sector_z
- **Definition**: Raw score decomposed into sector component and idiosyncratic component (residual after removing sector mean)
- **Why This Feature**: Acquisition likelihood has strong sector effects (biotech always higher than utilities); this feature isolates company-specific vulnerability from industry consolidation waves
- **Logical Meaning**: Pure firm-specific acquisition likelihood purged of sector baseline; identifies outliers within sectors rather than just sector bets
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Sector means require valid sector classification; use group_mean backfill by sector for missing values.
- **Directionality**: High values indicate higher-than-sector-average likelihood (sector-relative attractive target); Low values indicate lower-than-sector peers
- **Boundary Conditions**: Near 0 indicates perfectly average for sector; Extreme values indicate sector outlier status
- **Implementation Example**: `{alert_score} - group_mean({alert_score}, sector)`

**Concept**: Probability Tier Composition
- **Sample Fields Used**: alert_prob, alert_conf
- **Definition**: Categorical feature identifying whether stock is in high-prob/high-conf, high-prob/low-conf, etc. quadrant (encoded as -1, 0, 1 interaction)
- **Why This Feature**: Combines two dimensions into discrete regimes; different quadrants require different strategies (e.g., high prob low conf = speculative; high prob high conf = high conviction)
- **Logical Meaning**: Joint distribution positioning; captures the quality of the acquisition likelihood signal
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Categorical features should not have NaNs; map missing to 0 (neutral).
- **Directionality**: Positive values indicate high probability + high confidence (best candidates); Negative values indicate low probability + high confidence (safest from acquisition)
- **Boundary Conditions**: Boundary at median splits creates discrete jumps; smooth version preferred for alpha construction
- **Implementation Example**: `sign({alert_prob} - 0.5) * sign({alert_conf} - 0.5)`

---

### Q6: "What is cumulative?" (Accumulation Features)

**Concept**: Cumulative Anomaly Score
- **Sample Fields Used**: alert_score, alert_conf
- **Definition**: Time-decayed sum of confidence-weighted deviations from mean over 90 days (accumulating evidence of elevated likelihood)
- **Why This Feature**: Single-day spikes may be noise; persistent elevation over time suggests genuine emerging vulnerability; decay prevents stale information accumulation
- **Logical Meaning**: Running total of evidence suggesting acquisition likelihood; represents "pressure building" over time
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Accumulation requires continuous series; backfill NaNs with 0 contribution to avoid bias.
- **Directionality**: High positive values indicate sustained period of elevated likelihood (mature target); Near zero indicates normal or variable likelihood
- **Boundary Conditions**: Very high values indicate long-term high likelihood without acquisition (stale signal); Negative values indicate sustained low likelihood
- **Implementation Example**: `ts_decay_linear(({alert_score} - ts_mean({alert_score}, 20)) * {alert_conf}, 90)`

**Concept**: Time-Weighted Confidence
- **Sample Fields Used**: alert_conf
- **Definition**: Exponentially weighted average of model confidence over 60 days, giving higher weight to recent observations
- **Why This Feature**: Recent confidence is more relevant than old confidence; exponential decay mimics information half-life in M&A rumors
- **Logical Meaning**: Trend in model certainty; rising confidence suggests clarifying corporate situation, falling confidence suggests uncertainty/ambiguity
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Confidence is always defined; if NaN appears, treat as 0 confidence (no information) rather than backfilling.
- **Directionality**: High values indicate consistently high confidence (reliable model); Declining values indicate deteriorating data quality or unusual corporate events
- **Boundary Conditions**: Near 1.0 indicates perfect confidence (suspicious if sustained); Near 0 indicates model has no conviction
- **Implementation Example**: `ts_decay_exp_window({alert_conf}, 60, factor=0.9)`

---

### Q7: "What is relative?" (Comparison Features)

**Concept**: Cross-Sectional Likelihood Percentile
- **Sample Fields Used**: alert_score
- **Definition**: Rank-based percentile of acquisition likelihood within universe (0-1 scale), transformed to Gaussian distribution
- **Why This Feature**: Converts absolute scores to relative positioning; handles regime changes in overall M&A activity (e.g., during bear markets, all scores may be low, but relative percentiles remain valid)
- **Logical Meaning**: Relative attractiveness as acquisition target compared to all other stocks; scale-invariant measure
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Cross-sectional rank requires full universe participation; stocks outside universe should be NaN (not filled).
- **Directionality**: High values (near 1.0) indicate top decile takeover likelihood (long candidates); Low values (near 0) indicate bottom decile (short candidates or safe from acquisition)
- **Boundary Conditions**: Uniform distribution expected; clustering at extremes indicates market-wide M&A wave
- **Implementation Example**: `quantile({alert_score}, driver="gaussian", sigma=1.0)`

**Concept**: Sector-Relative Rank
- **Sample Fields Used**: alert_rank, alert_sector_z
- **Definition**: Rank within sector vs rank within universe; positive when stock ranks higher in its sector than in the overall universe
- **Why This Feature**: Identifies sector leaders in acquisition likelihood; within-sector top targets may be acquired by sector peers even if not universe top targets
- **Logical Meaning**: Sector-specific takeover vulnerability; captures intra-industry consolidation plays
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Sector-relative calculations require valid sector; use general universe rank if sector missing.
- **Directionality**: Positive values indicate high rank within sector (sector consolidation target); Negative values indicate low sector-relative rank
- **Boundary Conditions**: Extreme values indicate sector outliers; Zero indicates consistent ranking across sector and universe
- **Implementation Example**: `group_mean({alert_rank}, sector) - {alert_rank}`

---

### Q8: "What is essential?" (Essence Features)

**Concept**: Pure Likelihood Signal
- **Sample Fields Used**: alert_score, alert_conf
- **Definition**: Acquisition score neutralized against market beta and size factors, preserving only idiosyncratic acquisition likelihood
- **Why This Feature**: Acquisition likelihood may correlate with size (small caps more likely) or beta (high beta in risk-on); this extracts the pure event-driven component
- **Logical Meaning**: Factor-neutral acquisition likelihood; represents the "acquisition alpha" independent of style factor exposures
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Factor neutralization requires complete factor data; preserve NaN if factors missing to avoid false neutrality.
- **Directionality**: High values indicate high likelihood not explained by style factors (pure target); Low values indicate likelihood explained by factor exposures (spurious signal)
- **Boundary Conditions**: Residuals should be mean-zero; extreme outliers indicate unique situations
- **Implementation Example**: `regression_neut({alert_score}, market_cap) * {alert_conf}`

**Concept**: Information Ratio of Likelihood
- **Sample Fields Used**: alert_score, alert_conf
- **Definition**: Rolling information ratio of acquisition score (mean change divided by volatility of changes), filtered for high confidence periods only
- **Why This Feature**: The essence of a good predictor is high signal-to-noise ratio; this distills the score to its risk-adjusted predictive power, using confidence as the filter
- **Logical Meaning**: Risk-adjusted return of the acquisition likelihood signal; measures efficiency of prediction per unit of volatility
- **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. Information ratio requires continuous returns; backfill price changes but not signal changes.
- **Directionality**: High positive values indicate strong trending signal with low noise (high quality); Near zero indicates noisy signal; Negative indicates mean-reverting (contrarian signal)
- **Boundary Conditions**: Values >2.0 indicate exceptional consistency; Values <-2.0 indicate consistent wrong-way predictions (potential short signal)
- **Implementation Example**: `ts_ir({alert_score}, 60) * if_else({alert_conf} > 0.7, 1, 0)`

---

## Implementation Considerations

### Data Quality Notes
- **Coverage**: Model coverage is high (95%+) for established stocks but may lag for recent IPOs or spin-offs; coverage gaps typically indicate insufficient historical data for model training
- **Timeliness**: Daily updates occur overnight; scores reflect previous close data; delay=1 setting appropriate for avoiding look-ahead bias
- **Accuracy**: Calibrated probabilities (alert_prob) historically accurate but may drift during structural shifts in M&A markets (regulatory changes, tax regime shifts)
- **Potential Biases**: Small-cap bias (higher likelihood scores for small companies due to higher base rates); Sector bias (tech, healthcare overrepresented in high scores)

### Computational Complexity
- **Lightweight features**: Cross-sectional ranks, simple deltas, z-scores (alert_chg, quantile transformations)
- **Medium complexity**: Rolling regressions, time-series correlations, sector-neutral calculations (regression_neut, ts_corr features)
- **Heavy computation**: Robust regression slopes (ts_theilsen), high-frequency backtesting of probability calibration, multi-factor neutralization across full universe

### Recommended Prioritization

**Tier 1 (Immediate Implementation)**:
1. **Confidence-Weighted Momentum** - Combines the two most predictive aspects (change + certainty) into a single actionable metric; high Sharpe potential
2. **Sector-Neutral Likelihood Deviation** - Removes largest source of bias (sector effects); essential for cross-sector comparison
3. **Cross-Sectional Likelihood Percentile** - Most robust to regime changes; pure relative value signal

**Tier 2 (Secondary Priority)**:
1. **Score-Rank Divergence** - Captures model inconsistencies that may indicate special situations
2. **Cumulative Anomaly Score** - Good for identifying "ripening" targets but requires careful decay parameter tuning

**Tier 3 (Requires Further Validation)**:
1. **Acceleration of Likelihood** - Second derivatives are noisy; requires longer lookback periods to stabilize
2. **Probability Tier Composition** - Categorical approaches may be too coarse; smooth versions preferred

---

## Critical Questions for Further Exploration

### Unanswered Questions:
1. How does the model perform during periods of M&A drought (e.g., 2008, 2020) versus M&A booms? Does the score calibration adjust or do all scores compress uniformly?
2. What is the half-life of the prediction signal? Do top-decile stocks in month T still have elevated probability in month T+6, or is there rapid mean reversion?
3. How does the model handle competing bids or deal failures? Does a failed bid reset the score or increase it (second bidder likely)?

### Recommended Additional Data:
- **Deal completion rates**: Probability of deal closing conditional on announcement (regulatory risk, financing risk)
- **Strategic buyer availability**: Cash balances and acquisition history of potential acquirers in the same sector
- **Insider ownership changes**: Recent buying/selling by management as confirmation of model predictions
- **Options market data**: Implied volatility skews that might confirm or contradict model-based takeover probabilities

### Assumptions to Challenge:
- **Assumption**: Higher scores always predict higher returns. Challenge: Acquisition likelihood may be priced in; high scores may indicate "deal rumor premium" that collapses if no deal occurs (buy the rumor, sell the news in reverse).
- **Assumption**: Model confidence is well-calibrated. Challenge: Confidence may reflect data quantity rather than prediction quality; low-confidence predictions on obscure small-caps may actually have higher alpha due to less analyst coverage.
- **Assumption**: 12-month horizon is optimal holding period. Challenge: The best alpha may come from the first 30 days after entering top decile (initial move) or the last 30 days before month 12 (deal announcement), requiring dynamic holding periods.

---

## Methodology Notes

**Analysis Approach**: This report was generated by:
1. Deep field deconstruction to understand data essence (forward-looking probability estimates vs. historical data)
2. Question-driven feature generation (8 fundamental questions applied to M&A prediction context)
3. Logical validation of each feature concept against M&A market microstructure
4. Transparent documentation of reasoning for confidence-weighting and sector-neutralization priorities

**Design Principles**:
- Focus on logical meaning over conventional patterns (e.g., emphasizing confidence-weighting unique to model datasets)
- Every feature must answer a specific question about acquisition likelihood dynamics
- Clear documentation of "why" for each suggestion (momentum, mean-reversion, sector effects)
- Emphasis on data understanding (12-month horizon implications) over prediction

---

*Report generated: 2024-01-15*
*Analysis depth: Comprehensive field deconstruction + 8-question framework*
*Next steps: Implement Tier 1 features, validate assumptions about holding periods, gather deal completion data*