作者:
(1)Aarav Patel,阿米蒂地区高中,电子邮箱:[email protected];
(2)Peter Gloor,麻省理工学院集体智慧中心,通讯作者——电子邮箱:[email protected]。
该项目的创建分为三个步骤。第一步是通过网络爬虫在各种社交网络上收集数据。然后,使用自然语言处理对文本数据进行预处理并将其转换为子类别分数。最后,使用这些数据训练机器学习算法以计算出有凝聚力的 ESG 评级。
我们使用社交网络数据来全面量化 ESG,而不是使用公司自报文件。社交网络分析和网络抓取可用于识别趋势(Gloor 等人,2009 年)。Twitter、LinkedIn 和 Google News 等热门社交网络拥有大量与几乎所有主题相关的数据。这些数据可以提供公司 ESG 实践的平衡视图,并有助于涵盖短期和长期公司 ESG 趋势。它还可以收集文件中可能未反映的数据。最后,这些数据可以直接凸显外部人士的担忧,从而更好地指导公司 ESG 计划发挥更大影响力。
为此,我们创建了一份全面的 ESG 相关关键词列表(图 3)。该关键词列表的灵感来自当前 ESG 评级方法中常用的子类别。该列表用于帮助从维基百科、LinkedIn、Twitter 和 Google 新闻收集公开的公司数据。为了收集数据,我们使用 Python 开发了网络抓取工具。使用维基百科应用程序编程接口 (API) 收集维基百科数据。维基百科用于概述公司的实践。通过基于谷歌搜索识别热门新闻文章来收集 Google 新闻数据。存储了这些文章的链接。新闻用于提供有关值得注意的 ESG 发展情况的总体更新。借助 Snscrape 库收集 Twitter 数据。Snscrape 是一个轻量级 API,允许用户从几乎任何时间范围内收集几乎无限的推文(对每小时可以收集多少条推文有一定的限制)。选择 Twitter 主要是为了从消费者的角度提供有关公司实践的反馈。由于 LinkedIn API 不支持收集 LinkedIn 帖子,因此我们从头开始创建了一种算法来代替它。该算法利用 Selenium Chromedriver 模拟人类滚动浏览 LinkedIn 查询。在此基础上,通过 BeautifulSoup 使用 HTML 请求收集和存储每篇帖子的文本。LinkedIn 旨在提供有关公司实践的更专业的信息。此数据收集架构允许根据需要实时刷新和生成评级。之后,每个子类别的数据都存储在 CSV 文件中。
这四个社交网络涵盖了广泛的公司 ESG 数据。收集了大多数标准普尔 500 指数公司(不包括房地产)的数据。排除房地产主要是因为它没有得到太多与 ESG 问题相关的报道(基于表面分析),因此对于拟议的系统来说似乎不可行。这确保了收集的公司在各个行业和行业之间保持良好的平衡。网络抓取工具试图收集社交网络上每个关键词的约 100 篇帖子/文章。但是,由于 API 速率限制和不太知名的公司的数据可用性有限,有时会收集到较少的数据。为了加快收集速度,同时运行了多个脚本。起初,程序通常会因为在如此短的时间内收集如此多的数据而受到速率限制。为了解决这个问题,添加了保护措施以在遇到这种情况时暂停程序。所有数据收集均按照每个站点的条款和条件进行。总共收集了约 470 家公司约 937,400 个数据点,平均每个社交网络关键词约 37 个点。这些数据大部分集中在 2021 年。但是,并没有强加一个硬性的日期范围,因为这会删除那些已经很难收集足够信息的不太知名的公司的数据点。
收集完所有数据后,将其导出到电子表格中以供进一步分析。使用 RegEx(正则表达式)对数据进行预处理。首先,删除 URL 和链接。将提及替换为通用词以抽象名称。最后,删除不常见的字符和标点符号。这有助于过滤掉可能干扰 NLP 分析的单词/字符。
清理和整理数据后,构建了 NLP 算法进行分析。首先,创建 ESG 相关性算法来过滤掉可能妨碍结果的 ESG 无关数据。为此,使用关键字检测来查看帖子/文章是否讨论了当前公司以及一个或多个 ESG 子类别。接下来,使用 Python 的自然语言工具包 (NLTK) 命名实体识别库来确定帖子是否与组织相关,以删除意外数据。例如,如果搜索查询“苹果气候”,那么可能会出现一篇帖子说“春季气候是种植苹果树的最佳时间”。但是,命名实体识别将能够识别出这句话与 ESG 无关,因为“苹果”被用作形容词。因此,算法将忽略它。另一方面,如果帖子说“苹果正在向气候变化计划投入 5 亿美元”,那么算法将确定该帖子正在谈论苹果组织。这个过滤步骤有助于删除不相关的信息以提高数据质量。
过滤后,使用 NLP 情绪分析来评估帖子是 ESG 正面还是负面。为此,我们创建了两种 NLP 算法:短帖 NLP 算法分析较短的文本(推文、领英帖子),而长文 NLP 算法分析较长的文本(新闻文章、维基百科文章)。
对不同的 Python 情感分析库进行了文献分析。在比较了各种情感分析库(例如 TextBlob、VADER、FastText 和 Flair)后,发现 Flair 的表现优于其他分类器。这可能是因为简单的词袋分类器(例如 VADER 或 TextBlob)无法识别不同单词之间的关系。另一方面,Flair 使用上下文词向量来分析句子的单词级和字符级关系。这可能是为什么当在斯坦福情感树库 (SST) 上测试这些算法以按 1-5 的等级对电影评论情绪进行评分时,发现 Flair 算法表现最佳,F1 得分为 49.90% (Akbik et al., 2018) (Rao et al., 2019)(图 4)。因此,使用 Flair 情感分析库构建了短文算法。长文算法本质上是短文算法,但对文章中所有相关正文段落(即包含公司名称的段落)取平均值。
这些综合算法针对每个特定的社交网络进行了进一步优化。例如,LinkedIn 算法分析了 LinkedIn 帖子作者的个人资料,以消除自我报告。这是因为高管经常讨论他们的积极举措和目标,这可能会削弱其他公正的观察结果,从而影响结果。此外,对于 Twitter 和 LinkedIn 算法,如果在文本中找到链接地址,则算法将分析该文章进行评估。
最初,分析算法非常慢,因为 Flair 分析一篇帖子需要 3-4 秒。因此,安装了一个名为“Flair sentiment-fast”的变体。这使得 Flair 可以进行批量分析,同时分析多篇帖子。这大大缩短了分析时间,但略微牺牲了准确性。
对所有原始数据进行评分后,将分数平均后放入一个连贯的电子表格中。使用均值估算来填充任何缺失的子分数数据。这些子类别分数可以为高管提供有关关键问题的社会情绪细分,为他们提供具体信息,帮助他们了解哪些领域需要改进。这些分数可以用作原始分数,以帮助指导计划,也可以通过机器学习进一步编译,以提供 ESG 预测
整理数据后,测试了不同的机器学习模型。这些模型的目标是预测 0-100 之间的 ESG 分数,其中 0 表示最差,100 表示最好。大多数这些监督学习模型都是轻量级回归算法,可以用有限的数据学习非线性模式。其中一些算法包括随机森林回归、支持向量回归、K 近邻回归和 XGBoost(极端梯度提升)回归。随机森林回归通过在训练期间构建多个决策树并输出平均预测来运行(Tin Kam Ho,1995 年)。支持向量回归在阈值内确定最佳拟合线(Awad 等人,2015 年)。K 近邻回归根据其相邻数据点的平均值预测一个值(Kramer,2013 年)。 XGBoost(极端梯度提升)回归通过结合更简单的回归树的估计/预测来使用梯度提升(Chen 等,2016)。
这些回归算法使用 19 个特征进行训练。这些特征包括 18 个关键词的平均情绪,以及 Wikipedia 的附加类别。它们根据公开的标普全球 ESG 评级进行了校准,以确保它们与现有解决方案没有太大差异。GitHub 上公开许可的 ESG 评级抓取工具用于检索所有被分析公司的标普全球 ESG 分数 (Shweta-29)。为了提高准确性,我们使用了正则化等优化技术来防止过度拟合。
在创建算法之前,每个 ESG 子类别中文章/帖子少于 5 篇的公司被过滤掉。这样剩下约 320 家公司可供分析。为了创建和测试算法,约 256 家公司被用作训练数据,而约 64 家公司被用作测试数据。这些结果用于确定算法的预测能力。