Every month you lose 15% of subscribers because you don't know who is about to leave. Standard metrics like page views per session give a general picture but fail to show which content truly retains your audience and what triggers churn. ML models for publishers close these gaps: behavioral segmentation, content scoring, and churn prediction with 85–92% accuracy. In our practice over 5 years and 15+ projects for media, we have learned to turn raw logs into working tools for LTV growth. Project assessment is the first step toward reducing churn.
Why standard analytics doesn't work?
Publishers accumulate millions of events: page views, time on page, scrolls, shares — but only use the tip of the iceberg. Standard metrics don't show which readers are loyal, who will leave, and what content actually converts to subscription. ML solves these tasks with 85–92% accuracy. We guarantee result quality — each step is accompanied by testing. In one project for a media site with 200K MAU, we segmented the audience into 5 groups and configured personalized recommendation emails for each. After 3 months, retention increased by 12% and bounce rate decreased by 8%.
How we segment the audience?
Behavioral segmentation goes beyond demographics. We use a combination of RFM analysis and K-Means clustering on features: reading frequency, scroll depth, direct visit share, content categories. K-Means is 10 times faster than hierarchical clustering with similar quality.
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
def segment_readers(reader_events_df, n_segments=6):
"""
Reader segmentation based on behavioral features.
reader_events_df: events (articles, time, scroll_depth, shares)
"""
# Aggregate at reader level
reader_features = reader_events_df.groupby('reader_id').agg({
'article_id': 'count', # Frequency
'session_duration': 'mean', # engagement
'scroll_depth_pct': 'mean', # reading depth
'days_active': 'nunique', # active days
'category': lambda x: x.mode()[0], # favorite category
'shares': 'sum', # virality
'direct_visit': 'mean', # loyalty (non-search traffic)
'last_visit': lambda x: (pd.Timestamp.now() - pd.to_datetime(x).max()).days
}).reset_index()
reader_features.columns = ['reader_id', 'articles_read', 'avg_session',
'avg_scroll', 'active_days', 'top_category',
'shares', 'direct_ratio', 'recency_days']
# Normalization
numeric_cols = ['articles_read', 'avg_session', 'avg_scroll',
'active_days', 'shares', 'direct_ratio', 'recency_days']
scaler = StandardScaler()
X = scaler.fit_transform(reader_features[numeric_cols].fillna(0))
# K-Means clustering
kmeans = KMeans(n_clusters=n_segments, random_state=42, n_init=10)
reader_features['segment'] = kmeans.fit_predict(X)
return reader_features
Typical audience segments:
| Segment | Characteristics | Typical share |
|---|---|---|
| Loyalists | Direct entry, daily reading | 15% |
| Casual browsers | From social media, shallow browsing | 40% |
| Topic specialists | Single category, high engagement | 10% |
| Social sharers | Often share, little reading | 20% |
| Churning users | Declining activity | 15% |
Each segment receives a different content strategy — personalization increases engagement by 30% (per Reuters Institute data). Additionally, an attribution model (multi-touch) shows which articles actually drive subscriptions. We also use NLP clustering (BERTopic) to identify resonating topics, helping the editorial team understand which topics convert best in each segment.
How to interpret segments?
1. Define a goal: for Loyalists — retention, for Churning — win-back. 2. Tailor the content plan to segment preferences. 3. Use A/B testing to validate hypotheses. 4. Update segments monthly.How ML predicts subscriber churn?
Dynamic scoring of each subscriber accounts for declining reading frequency, email unsubscription, and inactivity. If a user hasn't opened emails for 3 weeks and hasn't visited the site — churn probability in the next 30 days reaches 70%. The LSTM model analyzes time series events and outputs churn probability. It is 40% more accurate than simple rules: AUC 0.91 vs. 0.78 for logistic regression. When churn probability is high, we trigger win-back: personalized best articles, special offer (if LTV justifies), re-engagement email series.
Content scoring: what really works?
We evaluate articles not by page views but by engagement quality:
| Metric | Weight | What it measures |
|---|---|---|
| Read rate (scroll >70%) | 30% | Attention retention |
| Time on page / expected | 25% | Real reading vs. bounce |
| Return rate | 20% | Reader returned via article |
| Social amplification | 15% | Virality |
| Subscription assists | 10% | Impact on conversion |
We also use NLP clustering (BERTopic) to identify resonating topics. The "topic × segment" matrix gives editorial clear insights: "Loyalists want more analysis, Casual want more listicles" — and allows optimizing the content plan.
What is included in our work?
We deliver a complete turnkey solution:
- Data audit — assessment of available logs from CRM, CMS, analytics.
- Model design — choice of algorithms (RFM, K-Means, BERTopic, LSTM for churn).
- Development and training — pipelines on PyTorch and Scikit-learn, versioning in MLflow.
- Integration — API for editorial dashboards and CRM.
- Documentation and dashboard access.
- Team training — workshops on interpreting results.
- Support — monitoring model drift and retraining for 3 months.
Read more about RFM analysis on Wikipedia.
Timelines and ROI
Building the base platform takes 2 to 4 months. Starting from $10,000 for a basic segmentation model, with investment payback within 3–6 months due to reduced subscriber churn (up to 25%, saving $50,000 annually for a mid-size publisher) and improved content marketing efficiency (ROI up to 150%).
We offer a turnkey solution for audience analytics and churn prediction. Write to us for a free project assessment — we will evaluate your data and prepare a tailored proposal.







