---
description: Matchly Elo-Based Ranking System
---

# ELO Score

### Overview

Matchly uses an Elo-based ranking system to dynamically adjust user popularity based on interactions. This system ensures that matches and visibility are influenced by both personal engagement and the popularity of those interacting with a user.

### 1. Initial Elo Score

Every new user starts with the average Elo score of all users to ensure a balanced matchmaking environment.

#### Formula:

$$
E_{new} = E_{avg}
$$



Where:

* **E(new)** = Initial Elo score of a new user.
* **E(avg** )= Average Elo score of all users in the system.

### 2. Elo Score Update on Interaction

When a user receives a **like** or **dislike**, their Elo score is updated based on the Elo of the person giving the interaction.

#### Formula:

$$
E_A' = E_A + K \cdot (R - P)
$$

Where:

* **E\_A** = Current Elo score of the user receiving the interaction.
* **E\_A'** = Updated Elo score.
* **E\_B** = Elo score of the user giving the like/dislike.
* **K** = Scaling factor (default: 32, can be adjusted for system balance).
* **R** = Actual outcome of the interaction:
  * If a **like** is received,
  * If a **dislike** is received,
* **P** = Expected outcome based on the Elo difference:

$$
P = \frac{1}{1 + 10^{(E_B - E_A)/400}}
$$



### 3. System Behavior

* **Receiving a like from a highly popular user (high Elo)** → Significant score increase.
* **Receiving a like from a less popular user (low Elo)** → Small score increase.
* **Receiving a dislike from a highly popular user** → Significant score decrease.
* **Receiving a dislike from a less popular user** → Smaller score decrease.

This system ensures a fair, dynamic matchmaking process where popular users maintain their influence, and new users have a chance to rise in visibility based on their engagement.

### 4. Customization & Fine-Tuning

You can tweak the **K factor** and the Elo distribution to balance the matchmaking experience, ensuring an engaging and rewarding user experience.

After a few trials, we've have decide to set K to 32.

***

For further optimization or adjustments, additional parameters such as decay for inactive users or boosted scores for new users can be implemented.
