Ranking Factors:
Going beyond just relevance by transforming 🪨 → 💎Best BusinessMatch(5 min)

Signals inthe rough(5 min)Cut and polishsignal gems
(10 min)Nate Day @natedayta
OpenSource Connections @o19s
Mices EU
2022-06-15

Blend thembeautifully(5 min)Best Match is out…Business Match is inBest MatchBusiness Match☠ Only for search nerds

👼 Extends beyond just the search team☠ Term Frequency-Keyword stuffing☠ Length norms-Favor shorter, less descriptive fields

Incentivizes bad behavior for contentcreators-

Business objectives are plentiful andwell defined👼 Search as an organization level effort-Merchandising, brand relationship,
executive strategy intersect here

Improved search understanding &involvement across the entire org@natedayta / @o19s

@natedayta / @o19s

“A diamond in the rough” 💎Idiom
Something that is in poor condition but that is likely to become valuable withappropriate care or attention.
example: The house is a diamond in the rough, and with some hard work it will bereally beautiful@natedayta / @o19s

Signals in the roughCounts
ClicksPurchases
Returns
StockContinuousPriceRatings
Qualitative
Curator picks
Brand tiers@natedayta / @o19s

@natedayta / @o19s

Nothing gold 👑 can stay
A poem by Robert Frost:
Nature’s first green is gold,
Her hardest hue to hold.
Her early leaf’s a flower,

All ranking factors
should be computed fora window in time

But only so an hour.
Then leaf subsides to leaf.
So Eden sank to grief,
So dawn goes down to day.

e.g. 1 week, 1 month, 1quarter

Nothing gold can stay.
@natedayta / @o19s

Scale time windows by search volume

1 week1 month
1 year@natedayta / @o19s

Uncut gems → ⚡→ Priceless pieces
Raw values are unbounded-similar to BM25

Makes combining multiple factors
difficult
Goal: scale values into a pre-setrange-[0,1] and [-1,1] make life easy@natedayta / @o19s

Useful scalers: max
Shifts values to the range [-∞,1]
Relative distance are preserved
Great for scenarios were the minimum isunknown-

like BM25
max = function(x) {max_x = max(x)x / max_x}@natedayta / @o19s

Useful normalizations: min-max
Shifts values to the range [0,1]Relative distance are preserved

min_max = function(x) {min_x = min(x)max_x = max(x)(x - min_x) / (max_x min_x)}@natedayta / @o19s

Useful normalizations: percent rank
Shifts values to the range [0,1]
Reflects rank order
Loses relative distance
perecent_rank = function(x){(min_rank(x) - 1) /(sum(x) - 1)}@natedayta / @o19s

Useful normalizations: tanh
Shifts values to the range [-1, 1]-positive values shift to [0, 1]“Smushes” extreme values more-Loses relative distance@natedayta / @o19s

Useful normalizations: modified tanhControl the amount of “smush”
Input values of zero are indeterminate

modified_tanh = function(x) {mu_x = mean(x)sd_x = sd(x)upper_bound = 1
upper_bound *tanh(1*((x-mu_x)/sd_x) + 1)}@natedayta / @o19s

Useful normalizations: Weibull "stretched exponential"
Control the “smush” factor
independently at either end-

varA & varB are the control
parameters

stretch_weibull = function(x) {var_a = 3
var_b = 2.41 - exp(-(x/var_a)^var_b)}@natedayta / @o19s

Time to combine
Linear combinations
Individual coefficient (weight) per ranking factor
Sum across weighted ranking factors

BM25
1

2

3max

Brand
TierClicks
percentrank

��@natedayta / @o19s

Danke→⚡→Your existing data may look rough but with some polishing it will become abeautiful ranking feature for your business@natedayta / @o19s