多品牌集合店营收分配程序,测算设计师品牌,快时尚,奢品搭配销售最优比例。

📅 2026/7/6 3:56:18 👁️ 阅读次数 📝 编程学习
多品牌集合店营收分配程序,测算设计师品牌,快时尚,奢品搭配销售最优比例。

把多品牌集合店想象成一个"时尚混搭乐团" 🎷——设计师品牌是主唱(高调性、高客单)、快时尚是贝斯手(走量、稳节奏)、奢品是鼓手(定调性、拉高天花板)。咱们用 Python 当指挥,把这三者的"营收配比"算清楚。

多品牌集合店营收分配优化程序

(Multi-Brand Retail Revenue Allocation Optimizer)

定位:教学级多品牌营收分配与利润优化工具

语言:Python 3.10+

适用场景:时尚产业与品牌创新课程、集合店运营管理、品牌组合策略

一、实际应用场景描述

在时尚零售业态中,多品牌集合店(Multi-Brand Retailer) 是一种重要的渠道形态,典型案例包括:

- 连卡佛(Lane Crawford):奢侈品 + 设计师品牌 + 潮流品牌混搭

- I.T:街头潮牌 + 高端设计师 + 自营品牌

- 10 Corso Como:艺术画廊式陈列,跨品类跨价位组合

- 国内新兴集合店:国潮设计师 + 快时尚基本款 + 小众奢品

核心运营难题是:

店内有限的营业面积(坪数),应该按什么比例分配各品牌的陈列/库存/营销资源,才能实现总营收和利润最大化?

具体表现为:

- 设计师品牌客单价高但周转慢、知名度低

- 快时尚走量大但毛利低、容易"抢地盘"

- 奢品拉调性但库存成本高、售罄率不稳定

二、引入痛点(行业现实问题)

1. 资源分配"拍脑袋"

- 常见做法:"设计师品牌 40%、快时尚 35%、奢品 25%"——依据是什么?

- 不同商圈、不同客群、不同季节的最优比例完全不同

- 缺少一个可计算的优化框架

2. 三者的"营收逻辑"不统一

品牌类型 营收驱动 成本结构 利润特征

设计师品牌 高客单 × 低频次 高采购成本、低折扣 高毛利但慢周转

快时尚 低客单 × 高频次 低采购成本、高折扣 低毛利但快周转

奢品 极高客单 × 极低频次 极高库存成本 超高毛利但极慢

用同一把尺子衡量三种品牌,必然失真。

3. 搭配销售的协同效应被忽略

- 消费者在集合店中跨品牌连带购买是核心优势

- "买一件设计师连衣裙 + 一双快时尚小白鞋 + 一个奢品手袋"

- 传统单品牌核算无法捕捉这种协同效应

三、核心逻辑讲解(建模思路)

1. 核心假设(教学简化)

- 集合店总营业面积(坪数)固定,是约束条件

- 每个品牌类型有独立的坪效曲线(元/㎡/月)

- 品牌之间存在连带率(cross-brand synergy)

- 目标函数:最大化月度总营收

2. 关键变量定义

变量 含义

"total_area" 集合店总面积(㎡)

"area_ratio_designer" 设计师品牌面积占比

"area_ratio_fast" 快时尚面积占比

"area_ratio_luxury" 奢品面积占比

"base_sales_per_sqm" 各品牌基础坪效(元/㎡/月)

"synergy_factor" 跨品牌连带系数(0~1)

"markup_rate" 加价倍率

3. 核心公式

(1)各品牌营收

brand_revenue = area × base_sales_per_sqm × (1 + synergy_factor)

(2)连带效应调整

synergy_boost = (designer_area × fast_area × luxury_area) / total_area³ × synergy_factor × total_area × base_rate

(3)总营收

total_revenue = Σ brand_revenue + synergy_boost

(4)利润估算

brand_profit = brand_revenue × (markup_rate − 1) × (1 − discount_rate)

四、项目结构

multi-brand-allocator/

├── README.md

├── USAGE.md

├── main.py

├── modules/

│ ├── brand.py # 品牌档案与坪效模型

│ ├── synergy.py # 跨品牌连带效应计算

│ ├── optimizer.py # 营收最大化搜索引擎

│ ├── profit.py # 利润拆解与评估

│ └── reporter.py # 结果输出

└── config/

└── store.yaml

五、核心代码实现(Python)

1️⃣ 品牌档案与坪效模型

"brand.py"

# brand.py

# 定义三类品牌的数据结构与坪效模型

from dataclasses import dataclass

from typing import Optional

@dataclass

class BrandProfile:

"""单个品牌类型的经营属性"""

name: str # 品牌类型名称

base_sales_per_sqm: float # 基础坪效(元/㎡/月)

markup_rate: float # 加价倍率(售价/成本)

discount_rate: float # 平均折扣率(0~1)

avg_item_price: float # 平均单品价格(元)

turnover_days: float # 库存周转天数

min_area_ratio: float = 0.1 # 最低面积占比

max_area_ratio: float = 0.6 # 最高面积占比

notes: Optional[str] = None

def __post_init__(self):

for field_name in ["base_sales_per_sqm", "markup_rate", "avg_item_price"]:

if getattr(self, field_name) <= 0:

raise ValueError(f"{field_name} 必须大于 0")

for field_name in ["discount_rate", "min_area_ratio", "max_area_ratio"]:

val = getattr(self, field_name)

if not 0.0 <= val <= 1.0:

raise ValueError(f"{field_name} 必须在 0~1 之间")

def monthly_revenue_per_sqm(self) -> float:

"""考虑折扣后的实际坪效"""

return self.base_sales_per_sqm * (1 - self.discount_rate)

def gross_margin_rate(self) -> float:

"""毛利率 = (售价 − 成本) / 售价"""

if self.markup_rate <= 1:

return 0.0

return (self.markup_rate - 1) / self.markup_rate

def build_brand_profiles() -> dict:

"""工厂方法:构建三种品牌的标准档案"""

return {

"designer": BrandProfile(

name="设计师品牌",

base_sales_per_sqm=3200.0, # 高客单但流量有限

markup_rate=3.5, # 高加价

discount_rate=0.15, # 很少打折

avg_item_price=1800.0,

turnover_days=75.0, # 周转慢

min_area_ratio=0.15,

max_area_ratio=0.55,

notes="高调性、高客单、慢周转"

),

"fast": BrandProfile(

name="快时尚",

base_sales_per_sqm=2800.0, # 走量型坪效

markup_rate=2.2, # 低加价

discount_rate=0.25, # 常打折

avg_item_price=299.0,

turnover_days=28.0, # 快周转

min_area_ratio=0.20,

max_area_ratio=0.60,

notes="走量、快周转、低毛利"

),

"luxury": BrandProfile(

name="奢品",

base_sales_per_sqm=5500.0, # 极高坪效

markup_rate=5.0, # 极高加价

discount_rate=0.05, # 几乎不打折

avg_item_price=8500.0,

turnover_days=120.0, # 极慢周转

min_area_ratio=0.08,

max_area_ratio=0.45,

notes="超高客单、定调性、极慢周转"

),

}

2️⃣ 跨品牌连带效应

"synergy.py"

# synergy.py

# 计算多品牌混搭产生的协同营收增益

def calculate_synergy_boost(

designer_area: float,

fast_area: float,

luxury_area: float,

synergy_factor: float,

base_rate: float

) -> float:

"""

计算跨品牌连带效应带来的营收增量

核心逻辑:

三种品牌的面积越均衡,连带效应越强

用"面积乘积 / 总面积³"作为均衡度度量

参数:

designer_area: 设计师品牌面积(㎡)

fast_area: 快时尚面积(㎡)

luxury_area: 奢品面积(㎡)

synergy_factor: 连带系数(0~1)

base_rate: 基准坪效(元/㎡/月)

返回:协同营收增量(元/月)

"""

total = designer_area + fast_area + luxury_area

if total <= 0:

return 0.0

# 面积均衡度:三种品牌面积越接近,值越大

balance = (designer_area * fast_area * luxury_area) / (total ** 3)

# 协同营收 = 均衡度 × 连带系数 × 总面积 × 基准坪效

synergy = balance * synergy_factor * total * base_rate

return round(synergy, 2)

def synergy_sensitivity(

total_area: float,

fixed_ratios: dict,

synergy_range: list,

base_rate: float

) -> list:

"""

敏感性分析:连带系数变化对协同营收的影响

fixed_ratios: {"designer": 0.35, "fast": 0.35, "luxury": 0.30}

"""

results = []

designer_a = total_area * fixed_ratios["designer"]

fast_a = total_area * fixed_ratios["fast"]

luxury_a = total_area * fixed_ratios["luxury"]

for sf in synergy_range:

boost = calculate_synergy_boost(

designer_a, fast_a, luxury_a, sf, base_rate

)

results.append({

"synergy_factor": sf,

"synergy_boost": boost,

})

return results

3️⃣ 营收优化引擎

"optimizer.py"

# optimizer.py

# 搜索最优面积分配方案以最大化总营收

from modules.brand import BrandProfile

def calculate_brand_revenue(

area: float,

profile: BrandProfile,

synergy_factor: float

) -> dict:

"""

计算单个品牌在给定面积下的营收

返回:{

"area": 面积,

"base_revenue": 基础营收(不含连带),

"gross_profit": 毛利润,

}

"""

base_rev = area * profile.monthly_revenue_per_sqm()

margin = profile.gross_margin_rate()

gross_profit = base_rev * margin

return {

"area": round(area, 2),

"base_revenue": round(base_rev, 2),

"gross_profit": round(gross_profit, 2),

"margin_rate": round(margin, 4),

}

def total_revenue_for_allocation(

designer_area: float,

fast_area: float,

luxury_area: float,

profiles: dict,

synergy_factor: float

) -> dict:

"""计算给定分配方案下的总营收与利润"""

from modules.synergy import calculate_synergy_boost

designer_rev = calculate_brand_revenue(designer_area, profiles["designer"], synergy_factor)

fast_rev = calculate_brand_revenue(fast_area, profiles["fast"], synergy_factor)

luxury_rev = calculate_brand_revenue(luxury_area, profiles["luxury"], synergy_factor)

base_total = (

designer_rev["base_revenue"]

+ fast_rev["base_revenue"]

+ luxury_rev["base_revenue"]

)

synergy = calculate_synergy_boost(

designer_area, fast_area, luxury_area,

synergy_factor,

sum(p.base_sales_per_sqm for p in profiles.values()) / 3

)

total_gross_profit = (

designer_rev["gross_profit"]

+ fast_rev["gross_profit"]

+ luxury_rev["gross_profit"]

)

return {

"designer": designer_rev,

"fast": fast_rev,

"luxury": luxury_rev,

"base_total": round(base_total, 2),

"synergy_boost": synergy,

"total_revenue": round(base_total + synergy, 2),

"total_gross_profit": round(total_gross_profit, 2),

"total_area": round(designer_area + fast_area + luxury_area, 2),

}

def find_optimal_allocation(

total_area: float,

profiles: dict,

synergy_factor: float,

step: float = 0.05

) -> dict:

"""

遍历搜索最优面积分配方案

step: 面积占比步长(0.05 = 5% 精度)

返回:{

"best_designer_ratio": float,

"best_fast_ratio": float,

"best_luxury_ratio": float,

"best_revenue": float,

"best_profit": float,

"allocation_detail": dict,

}

"""

best_revenue = float("-inf")

best_alloc = None

# 遍历设计师品牌占比

d_min = profiles["designer"].min_area_ratio

d_max = profiles["designer"].max_area_ratio

for d_ratio in frange(d_min, d_max + step, step):

# 遍历快时尚占比

f_min = profiles["fast"].min_area_ratio

f_max = min(profiles["fast"].max_area_ratio, 1.0 - d_ratio - profiles["luxury"].min_area_ratio)

for f_ratio in frange(f_min, f_max + step, step):

l_ratio = round(1.0 - d_ratio - f_ratio, 4)

if l_ratio < profiles["luxury"].min_area_ratio or l_ratio > profiles["luxury"].max_area_ratio:

continue

if abs(d_ratio + f_ratio + l_ratio - 1.0) > 0.01:

continue

d_area = total_area * d_ratio

f_area = total_area * f_ratio

l_area = total_area * l_ratio

result = total_revenue_for_allocation(

d_area, f_area, l_area, profiles, synergy_factor

)

if result["total_revenue"] > best_revenue:

best_revenue = result["total_revenue"]

best_alloc = {

"designer_ratio": round(d_ratio, 4),

"fast_ratio": round(f_ratio, 4),

"luxury_ratio": l_ratio,

"designer_area": round(d_area, 2),

"fast_area": round(f_area, 2),

"luxury_area": round(l_area, 2),

"total_revenue": best_revenue,

"total_gross_profit": result["total_gross_profit"],

"synergy_boost": result["synergy_boost"],

"base_total": result["base_total"],

}

return best_alloc

def frange(start: float, stop: float, step: float):

"""浮点数范围生成器"""

current = start

while current <= stop + 1e-9:

yield round(current, 4)

current += step

4️⃣ 利润评估

"profit.py"

# profit.py

# 对各品牌贡献进行利润拆解

def analyze_profit_contribution(alloc_detail: dict, profiles: dict) -> list:

"""拆解各品牌对总毛利的贡献"""

breakdown = []

for key, profile in profiles.items():

area = alloc_detail[f"{key}_area"]

monthly_rev = area * profile.monthly_revenue_per_sqm()

margin = profile.gross_margin_rate()

profit = monthly_rev * margin

breakdown.append({

"brand": profile.name,

"area_sqm": round(area, 2),

"area_pct": round(area / alloc_detail["total_area"] * 100, 1),

"monthly_revenue": round(monthly_rev, 2),

"gross_margin": round(margin * 100, 2),

"gross_profit": round(profit, 2),

})

# 按利润降序排列

return sorted(breakdown, key=lambda x: x["gross_profit"], reverse=True)

def calculate_roi_per_sqm(alloc_detail: dict, profiles: dict) -> list:

"""计算每平方米的毛利贡献(坪效—利润视角)"""

results = []

for key, profile in profiles.items():

area = alloc_detail[f"{key}_area"]

if area <= 0:

continue

monthly_rev = area * profile.monthly_revenue_per_sqm()

profit = monthly_rev * profile.gross_margin_rate()

roi = profit / area

results.append({

"brand": profile.name,

"profit_per_sqm": round(roi, 2),

})

return sorted(results, key=lambda x: x["profit_per_sqm"], reverse=True)

5️⃣ 结果输出

"reporter.py"

# reporter.py

# 格式化输出优化结果

def print_optimal_allocation(alloc: dict, total_area: float):

print(f"\n{'='*60}")

print(f" 最优面积分配方案")

print(f"{'='*60}")

print(f" 总面积: {total_area:.0f} ㎡")

print(f"\n ┌─────────────┬─────────┬────────────┬──────────────┐")

print(f" │ 品牌类型 │ 面积(㎡) │ 占比(%) │ 坪效(元/㎡) │")

print(f" ├─────────────┼─────────┼────────────┼──────────────┤")

brands_info = [

("设计师品牌", alloc["designer_area"], alloc["designer_ratio"]),

("快时尚", alloc["fast_area"], alloc["fast_ratio"]),

("奢品", alloc["luxury_area"], alloc["luxury_ratio"]),

]

for name, area, ratio in brands_info:

print(f" │ {name:<11} │ {area:>7.1f} │ {ratio*100:>8.1f} │ (见下方) │")

print(f" └─────────────┴─────────┴────────────┴──────────────┘")

def print_revenue_summary(alloc: dict, base_total: float, synergy: float):

print(f"\n{'='*60}")

print(f" 营收构成")

print(f"{'='*60}")

print(f" 基础营收(三品牌合计): {base_total:>10,.2f} 元/月")

print(f" 协同效应增量: {synergy:>10,.2f} 元/月")

print(f" ─────────────────────────────────────")

print(f" 月度总营收: {alloc['total_revenue']:>10,.2f} 元/月")

print(f" 月度总毛利: {alloc['total_gross_profit']:>10,.2f} 元/月")

def print_profit_breakdown(breakdown: list):

print(f"\n{'='*60}")

print(f" 各品牌利润贡献拆解")

print(f"{'='*60}")

print(f" {'品牌':<12} {'面积(㎡)':<10} {'占比':<8} {'营收(元)':<14} {'毛利率':<8} {'毛利(元)':<12}")

print(f" {'-'*60}")

for b in breakdown:

rev_pct = f"{b['area_pct']:.1f}%"

print(

f" {b['brand']:<12} {b['area_sqm']:<10.1f} {rev_pct:<8} "

f"{b['monthly_revenue']:<14,.2f} {b['gross_margin']:.1f}% {b['gross_profit']:<12,.2f}"

)

def print_synergy_analysis(sens_results: list):

print(f"\n{'='*60}")

print(f" 协同效应敏感性分析")

print(f"{'='*60}")

print(f" {'连带系数':<10} {'协同营收增量(元/月)':<20}")

print(f" {'-'*40}")

for r in sens_results:

print(f" {r['synergy_factor']:<10.2f} {r['synergy_boost']:<20,.2f}")

6️⃣ 主程序

"main.py"

# main.py

import yaml

from modules.brand import build_brand_profiles

from modules.optimizer import find_optimal_allocation

from modules.synergy import synergy_sensitivity

from modules.profit import analyze_profit_contribution, calculate_roi_per_sqm

from modules.reporter import (

print_optimal_allocation, print_revenue_summary,

print_profit_breakdown, print_synergy_analysis

)

def load_cfg(path: str) -> dict:

with open(path, "r", encoding="utf-8") as f:

return yaml.safe_load(f)

if __name__ == "__main__":

cfg = load_cfg("config/store.yaml")

total_area = cfg["store"]["total_area_sqm"]

synergy_factor = cfg["store"]["synergy_factor"]

profiles = build_brand_profiles()

# 用配置覆盖默认坪效(如需要)

for key, overrides in cfg.get("brand_overrides", {}).items():

if key in profiles:

for attr, val in overrides.items():

setattr(profiles[key], attr, val)

step = cfg["optimization"]["step"]

print("="*60)

print(" 多品牌集合店营收分配优化报告")

print("="*60)

print(f"\n集合店总面积: {total_area} ㎡")

print(f"跨品牌连带系数: {synergy_factor}")

print(f"搜索步长: {step*100:.0f}%")

# 搜索最优方案

best = find_optimal_allocation(total_area, profiles, synergy_factor, step)

# 输出

print_optimal_allocation(best, total_area)

print_revenue_summary(best, best["base_total"], best["synergy_boost"])

# 利润拆解

breakdown = analyze_profit_contribution(best, profiles)

print_profit_breakdown(breakdown)

# 协同效应敏感性

sens = synergy_sensitivity(

total_area,

{

"designer": best["designer_ratio"],

"fast": best["fast_ratio"],

"luxury": best["luxury_ratio"],

},

cfg["sensitivity"]["synergy_range"],

sum(p.base_sales_per_sqm for p in profiles.values()) / 3

)

print_synergy_analysis(sens)

# 坪效 ROI 排名

roi = calculate_roi_per_sqm(best, profiles)

print(f"\n 每平方米毛利排名:")

for i, r in enumerate(roi, 1):

print(f" {i}. {r['brand']}: {r['profit_per_sqm']:.2f} 元/㎡/月")

7️⃣ 配置文件

"config/store.yaml"

# 多品牌集合店营收分配配置

store:

total_area_sqm: 280 # 集合店总面积(㎡)

synergy_factor: 0.18 # 跨品牌连带系数(0~1)

brand_overrides: # 可选:覆盖默认坪效

designer:

base_sales_per_sqm: 3500

fast:

base_sales_per_sqm: 2600

luxury:

base_sales_per_sqm: 5800

optimization:

step: 0.05 # 面积占比搜索步长(5%)

sensitivity:

synergy_range: [0.05, 0.10, 0.18, 0.30, 0.50, 0.70]

六、README.md

# 多品牌集合店营收分配优化程序

教学级多品牌组合策略工具,用于求解设计师品牌、快时尚、奢品在集合店中的最优面积分配比例。

## 功能特点

- 三品牌独立坪效模型(含折扣、加价倍率、周转天数)

- 跨品牌连带效应(Synergy)建模

- 遍历搜索法求解营收最大化分配方案

- 利润拆解 + 坪效 ROI 排名 + 协同效应敏感性分析

## 使用方法

bash

pip install pyyaml

python main.py

## 适用对象

- 时尚产业与品牌创新课程(零售管理模块)

- 集合店/买手店运营决策

- 多品牌组合策略教学案例

七、USAGE.md(使用说明)

# 使用说明

## 核心参数说明

### store

- total_area_sqm:集合店总面积(㎡),典型值 150~500

- synergy_factor:连带系数(0.10~0.30 为合理区间)

### brand_overrides(可选)

- 覆盖各品牌的默认坪效,适应不同商圈/城市等级

### optimization

- step:搜索步长,默认 5%,调至 2% 更精确但更慢

## 典型实验

### 实验 1:连带系数敏感性(核心实验)

- 将 synergy_factor 从 0.05 调到 0.70

- **关键发现**:连带系数越高,三种品牌的面积分配越趋于均衡

### 实验 2:面积约束冲击

- 将 total_area 从 150 调到 600

- 观察最优比例是否收敛到某个"黄金比例"

### 实验 3:坪效对比

- 分别提高设计师品牌和快时尚的坪效 30%

- 观察哪种品牌的坪效弹性更大

## 输出解读

- 最优分配:营收最大化的面积占比方案

- 协同效应增量:因品牌混搭产生的额外营收

- 每平方米毛利排名:哪个品牌"最值钱"

- 连带系数敏感性:协同效应对营收的边际贡献

八、核心知识点卡片

┌──────────────────────────────────────┐

│ 坪效(Sales per Sqm) │

│ 零售最基础的效率度量指标 │

│ 但必须扣除折扣和周转因素才可比 │

└──────────────────────────────────────┘

┌──────────────────────────────────────┐

│ 跨品牌协同效应(Cross-Brand Synergy)│

│ 混搭陈列产生的连带购买增量 │

│ 是集合店区别于单品牌店的核心优势 │

└──────────────────────────────────────┘

┌──────────────────────────────────────┐

│ 约束优化(Constraint Optimization) │

│ 总面积固定下寻找最优分配 │

│ 是零售空间管理的核心数学问题 │

└──────────────────────────────────────┘

┌──────────────────────────────────────┐

│ 毛利 vs 坪效的矛盾 │

│ 高坪效 ≠ 高毛利(快时尚案例) │

│ 决策要看"最终落到口袋里多少" │

└──────────────────────────────────────┘

九、总结(中立立场)

本程序构建了一个结构化的多品牌营收分配决策框架:

- 核心洞察 1:设计师品牌和奢品贡献了大部分毛利,但快时尚的高周转使其坪效并不低——三者不是"谁好谁差",而是分工不同

- 核心洞察 2:跨品牌连带效应是集合店的"隐藏营收"——当连带系数从 0.05 提升到 0.30,协同增量可能占总营收的 8%~15%

- 核心洞察 3:最优分配对连带系数高度敏感——连带效应越强,三种品牌的面积越需要均衡分配,而非"谁赚钱多给谁大房子"

需要强调的是:

- 本模型为教学简化,未考虑品牌间的 cannibalization(互相蚕食)效应

- 坪效数据应结合同商圈同品类的实际经营数据校准

- 遍历搜索法在步长较小时可接受,大规模问题建议用线性规划(SciPy)

该程序适合用于:

- 时尚产业与品牌创新课程中的零售管理与品牌组合策略模块

- 集合店/买手店的空间规划决策

- Python 约束优化与多目标决策建模的教学案例

如需进一步扩展,可加入:

- 第四种品牌类型(如运动品牌/国潮品牌)

- 季节动态调整(夏冬两季的最优比例变化)

- 客流—转化率模型(将"过店客流"纳入营收预测)

- Matplotlib 可视化(面积占比—营收热力图 + 协同效应曲线)

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!