第4章:S(社会)因子构建:员工满意度、供应链管理、社区关系、社会得分合成

社会因子,圈内人常叫它"S因子"。说实话,它比E(环境)和G(治理)难搞多了。为什么?因为很多东西没法直接量化。员工开不开心,供应链有没有压榨童工,社区关系好不好——这些听着就虚。

但别急。我做了这么多年ESG量化,摸索出一套还算靠谱的方法。今天咱们就把它拆开揉碎,一步步讲清楚。

4.1 员工满意度:从问卷到分数

员工满意度,说白了就是员工愿不愿意在这家公司干下去。我见过最直接的指标是离职率。但光看离职率太粗糙了。

我个人习惯用三个维度来评估:

  • 薪酬竞争力:人均薪酬 / 行业平均薪酬。大于1说明给得起钱。
  • 培训投入:人均培训费用。这个数据很多公司不披露,得从年报里扒。
  • 晋升公平性:内部晋升比例。如果全是空降高管,员工会寒心。

举个例子。我曾在某制造业公司做过一个项目。他们离职率高达25%,但薪酬水平其实不低。后来一查,问题出在晋升通道上——三年没一个内部提拔。嗯,这就是典型的"钱没给到位,心更委屈了"。

核心公式:
员工满意度得分 = 0.4 × 薪酬竞争力 + 0.3 × 培训投入 + 0.3 × 晋升公平性

权重怎么定?我建议用主成分分析(PCA)跑一遍,让数据自己说话。别拍脑袋。

4.2 供应链管理:别只看一级供应商

供应链这块,最容易踩坑。很多公司只披露一级供应商的数据,但真正的风险在二级、三级供应商那里。

我曾经帮一家零售企业做ESG评估。他们的一级供应商全是合规的,但二级供应商里有个小厂,被曝出使用童工。结果舆论炸了,股价三天跌了12%。

所以我的做法是:

  1. 供应商审核覆盖率:已审核供应商数量 / 总供应商数量。目标100%。
  2. 违规事件数:过去一年被曝光的供应链违规事件。这个数据可以从新闻和NGO报告里抓。
  3. 绿色采购比例:符合环保标准的采购额 / 总采购额。
注意: 供应链数据披露率极低。我建议用自然语言处理(NLP)从年报和ESG报告中提取关键词,比如"供应商审计""可持续采购"等。实在拿不到数据的,用行业均值填充,但要在模型里标记为"低置信度"。

4.3 社区关系:钱和事都要看

社区关系,很多人以为就是捐了多少钱。其实不止。

我把它拆成两部分:

  • 社区投入:捐赠金额 / 营业收入。这个数据相对好拿。
  • 社区冲突:过去一年与当地社区发生的纠纷次数。比如征地冲突、污染投诉等。

你想想看,一个公司捐了很多钱,但天天跟村民打官司,这能叫社区关系好吗?

所以我的合成公式是:

社区关系得分 = 社区投入得分 - 社区冲突扣分

冲突一次扣10分,上不封顶。嗯,就是这么狠。

4.4 社会得分合成:加权还是等权?

好,现在我们有三个子因子了:员工满意度、供应链管理、社区关系。怎么合成一个总分?

我建议用等权法起步。为什么?因为这三个维度的重要性其实差不多。等权法简单、透明、好解释。

但如果你想让模型更聪明,可以用熵权法。熵权法的逻辑是:哪个指标的数据差异大,哪个权重就高。说白了,就是让数据自己决定重要性。

下面是我常用的合成代码:

import pandas as pd
import numpy as np

def social_score(df):
    """
    df: 包含员工满意度、供应链管理、社区关系三列
    返回:社会得分(百分制)
    """
    # 等权法
    weights = [1/3, 1/3, 1/3]
    df['social_score'] = (
        df['employee_satisfaction'] * weights[0] +
        df['supply_chain'] * weights[1] +
        df['community_relation'] * weights[2]
    )
    
    # 归一化到0-100
    df['social_score'] = (df['social_score'] - df['social_score'].min()) / \
                         (df['social_score'].max() - df['social_score'].min()) * 100
    return df
避坑指南: 我曾经直接用原始分数合成,结果发现某个行业因为数据披露好,分数普遍偏高。后来我改用行业中性化处理——每个行业内部做标准化,再合成。这样跨行业可比性更强。

4.5 知识体系总览

下面这张图,是我自己梳理的S因子构建全流程。你看一眼就能明白整体逻辑。

S因子构建全流程 数据源 年报 / ESG报告 / 新闻 员工满意度 薪酬·培训·晋升 供应链管理 审核·违规·绿色采购 社区关系 投入·冲突 社会得分合成 等权法 / 熵权法 S因子得分 百分制·行业中性化 数据预处理 → 因子计算 → 权重确定 → 得分合成 → 行业中性化

4.6 实战中的几个坑

最后,分享几个我踩过的坑:

  • 数据缺失:很多中小公司根本不披露社会数据。我的做法是:如果缺失超过50%,直接剔除这家公司。别硬填。
  • 行业差异:制造业和金融业的供应链风险完全不同。一定要做行业中性化。
  • 时间滞后:年报数据通常滞后6-9个月。用的时候要打时间戳,别把去年的数据当今年的用。

好了,S因子的构建思路就这些。下一章咱们聊G因子——公司治理。那个更有意思,因为数据最全,但坑也最多。


公众号:蓝海资料掘金营,微信deep3321