Using Linear Models to Predict Typing Progress
- Typing speed follows a logarithmic improvement curve — fast gains early, slower gains at higher speeds.
- A simple linear model predicts near-term progress reasonably well but overestimates long-term gains.
- Log-linear regression (linear fit on log-transformed WPM) fits the actual curve better for multi-month modeling.
- You need at least 2 to 3 weeks of daily data points before a model is meaningful.
- Tracking your own data and fitting a simple model is a practical way to set realistic goals.
The Shape of Typing Improvement
Typing speed doesn't improve in a straight line. The first few weeks of deliberate practice produce fast, visible gains. As you approach your current technique ceiling, gains slow. This is a logarithmic curve — rapid growth early, with a flattening tail as you reach limits.
This matters for goal setting. A model that assumes linear progress will predict you'll reach 100 WPM in 3 months when the actual timeline is 8 months. Managing expectations correctly keeps practice motivation realistic.
The Three Model Options
| Model type | Formula | Best for | Error profile |
|---|---|---|---|
| Linear regression | WPM = a + b*days | First 2–3 weeks of practice | Overestimates long-term gains |
| Log-linear regression | WPM = a + b*log(days) | Multi-month modeling | Better fit but harder to interpret |
| Power law | WPM = a * days^b | Long-term plateau prediction | Matches skill learning research well |
Fitting a Simple Linear Model
To fit a linear model to your typing data, you need: a list of dates, and the WPM score for each date. The model finds the straight line that best fits the data, and you can use it to project forward.
In Python with NumPy:
import numpy as np
# days since you started (0, 1, 2, ...)
days = np.array([0, 1, 3, 7, 10, 14, 21])
wpm = np.array([42, 44, 47, 51, 54, 58, 64])
# Fit a line: WPM = a + b * days
b, a = np.polyfit(days, wpm, 1)
# Predict WPM on day 30
predicted_day_30 = a + b * 30
print(f"Predicted WPM at day 30: {predicted_day_30:.1f}")
This is straightforward but will overestimate long-term progress because gains actually decelerate.
Fitting a Log-Linear Model
A better fit for multi-month data: transform the day numbers with logarithm before fitting.
# Log-linear model
log_days = np.log(days + 1) # +1 to avoid log(0)
b, a = np.polyfit(log_days, wpm, 1)
# Predict WPM at day 30
predicted_day_30 = a + b * np.log(30 + 1)
print(f"Log-linear predicted WPM at day 30: {predicted_day_30:.1f}")
What the Model Can and Can't Tell You
A model fitted to your own data gives you a personal improvement trajectory, not a universal one. Improvement rate varies significantly based on:
- Your starting WPM (lower starting points tend to improve faster in percentage terms)
- Practice volume per day
- Whether you fixed technique problems early or are building on flawed foundations
- The presence or absence of a plateau event
Use the model as a rough planning tool, not a precise forecast. If your model predicts you'll hit your target in 6 weeks and it takes 10, that's not a failure — it's a plateau, which has specific fixes. See how to break through a speed plateau.
To track your scores over time in a format you can export, create an account on TypingTest.now. Your daily test history gives you the data series to fit these models against.
¿Listo para ponerlo en práctica?
Haz una prueba de mecanografía gratuita y empieza a hacer seguimiento de tu progreso.
Prueba de mecanografía gratuita →