广告质量评分体系深度解析
广告质量评分是影响广告排名的核心因素之一,直接决定你在同等出价下能否赢得展示。本文拆解OpenClaw的质量分构成,教你如何系统性提升广告分。
一、质量分的构成公式
# 最终排名分 = eCPM = bid * pCTR * quality_score
#
# quality_score 构成:
# quality_score = (
# 0.35 * creative_score # 素材质量分
# 0.30 * landing_score # 落地页体验分
# 0.25 * historical_ctr # 历史点击率(归一化)
# 0.10 * relevance_score # 广告与内容相关性
# )
#
# 示例对比:
# 广告A: bid=5元, pCTR=2%, quality=0.9 -> eCPM=5*0.02*0.9*1000=90
# 广告B: bid=8元, pCTR=2%, quality=0.5 -> eCPM=8*0.02*0.5*1000=80
# A出价比B低37%,但质量分高,反而赢得竞价!
二、CTR预测模型详解
# 工业界CTR预测演进路径:
# LR(逻辑回归) -> GBDT+LR -> FM/FFM -> DNN -> Wide&Deep -> DeepFM
# 简化版CTR预测特征工程
import pandas as pd
import lightgbm as lgb
from sklearn.preprocessing import LabelEncoder
def build_ctr_features(df):
features = pd.DataFrame()
# 用户特征
features['user_age_bucket'] = pd.cut(df['user_age'], [0,18,25,35,45,100], labels=[0,1,2,3,4])
features['user_gender'] = df['gender'].map({'M':0, 'F':1})
features['user_7d_click_rate'] = df['user_7d_clicks'] / df['user_7d_impressions'].clip(1)
# 广告特征
features['ad_category'] = LabelEncoder().fit_transform(df['ad_category'])
features['ad_historical_ctr'] = df['ad_clicks'] / df['ad_impressions'].clip(1)
features['ad_age_days'] = (pd.Timestamp.now() - df['ad_create_time']).dt.days
# 上下文特征
features['hour_of_day'] = df['request_time'].dt.hour
features['is_weekend'] = df['request_time'].dt.weekday >= 5
features['ad_position_index'] = df['position'] # 1=首位, 2=次位
# 交叉特征 (LightGBM自动处理)
return features
# 训练
X = build_ctr_features(train_df)
y = train_df['clicked']
model = lgb.LGBMClassifier(n_estimators=500, learning_rate=0.05)
model.fit(X, y, eval_metric='auc')
三、素材质量自动审核
# 素材审核规则引擎
import re
class CreativeAuditor:
"""广告素材自动审核"""
FORBIDDEN_WORDS = ['最低价', '第一', '绝对', '保证', '包赚']
MAX_TITLE_LEN = 30
MAX_DESC_LEN = 60
def audit(self, creative):
issues = []
# 文案规范检查
if len(creative['title']) > self.MAX_TITLE_LEN:
issues.append(f'标题超长: {len(creative["title"])}字 (最多{self.MAX_TITLE_LEN}字)')
for word in self.FORBIDDEN_WORDS:
if word in creative['title'] or word in creative.get('description', ''):
issues.append(f'含违禁词: "{word}"')
# 图片尺寸检查
img = creative.get('main_image', {})
if img.get('width', 0) < 600:
issues.append(f'主图宽度不足: {img["width"]}px (最小600px)')
# 落地页可访问性检查
import requests
try:
r = requests.head(creative['landing_url'], timeout=3)
if r.status_code >= 400:
issues.append(f'落地页HTTP状态异常: {r.status_code}')
except:
issues.append('落地页无法访问')
status = 'rejected' if issues else 'approved'
return {'status': status, 'issues': issues, 'score': 100 - len(issues) * 10}
四、提升质量分的实用建议
| 质量维度 | 低分原因 | 提升方法 | 预期效果 |
|---|---|---|---|
| 素材质量 | 图片模糊/文案违规 | 使用高清图,避免绝对化用语 | quality+10~20% |
| 落地页体验 | 加载慢/内容不匹配 | 优化LCP<2.5s,内容与广告匹配 | 转化率+15% |
| 历史CTR | 新广告无数据 | 小预算冷启动,积累数据 | 3-7天后数据稳定 |
| 相关性 | 广告与媒体内容不匹配 | 精细化定向,选合适媒体 | CTR+5~10% |
总结:质量分不是孤立指标,它反映了用户对广告的真实感受。投入时间优化素材和落地页,比单纯提高出价性价比更高——同样的展示机会,高质量广告能获得更多点击和转化。
