数分基础(06)商业分析四种类型简介

news2024/9/21 2:36:17

文章目录

  • 1. 商业分析
  • 2. 四种类型
    • 2.1 描述性分析和诊断性分析
      • 2.1.1 加载Global_Superstore数据集
      • 2.1.2 描述性分析
      • 2.1.3 诊断性分析
      • 2.1.4 再进一步
        • 各地区的订单数量和平均订单金额
        • 按客户群体分析销售额和利润
        • 折扣率和利润
        • 产品类别和子类别的销售和利润
      • 本小节小结
    • 2.2 销售预测
      • 2.2.1 步骤
      • 2.2.2 分析
    • 2.3 规范性分析

1. 商业分析

利用数据优化业务流程,用以提升绩效并支持数据驱动决策的过程。

2. 四种类型

  • 描述性分析 Descriptive Analysis,总结和描述当前状态(例如销售额、平均订单量)
  • 诊断性分析 Diagnostic Analysis,分析问题(例如特定地区的销售下滑)
  • 预测性分析 Predictive Analysis,预测未来趋势(例如未来销售额)
  • 规范性分析 Prescriptive Analysis,提供建议(例如定价策略)

2.1 描述性分析和诊断性分析

2.1.1 加载Global_Superstore数据集

我们仍旧使用这个数据集,数分基础(01)示例数据集Global_Superstore

加载数据集

import pandas as pd

file_path = "Global_Superstore2.xlsx"
excel_data = pd.ExcelFile(file_path)

excel_data.sheet_names

data = pd.read_excel(file_path, sheet_name='Sheet1')
data.head()

2.1.2 描述性分析

用数据总结和描述当前的状况,回答“发生了什么”。业务报告、仪表盘、绩效监控等。常见于日常的运营分析和月度、季度报告中。

计算总销售额
销售额字段求和,获取公司整体的销售情况。直观反映公司的业务规模和市场表现。

计算平均订单金额
总销售额除以订单数量,得出平均每笔订单的金额。反映客户的平均消费水平。

比较不同产品类别的表现
分组计算各产品类别的销售额和利润率,以识别哪些类别产品销售表现突出,哪些类别产品利润贡献较大。以便制定更有针对性的产品策略。

total_sales = data['Sales'].sum()
print(f"总销售额: {total_sales}")

average_order_value = data['Sales'].mean()
print(f"平均订单金额: {average_order_value}")

category_performance = data.groupby('Category')[['Sales', 'Profit']].sum().reset_index()
print(category_performance)

在这里插入图片描述
可以从中看出哪些产品或服务是销售的主力

2.1.3 诊断性分析

回答“为什么”的问题,帮助识别薄弱环节,并提出问题的解决方向。多用于客户反馈分析、损益分析等。

例如,找出销售低迷的区域,并分析
识别低绩效区域
按地区分组计算销售额和利润率,定位销售表现不佳的区域,便于进一步分析

对比高绩效区域
通过对比高绩效区域和低绩效区域的数据,直观发现两者之间的差异,为后续的原因分析提供线索

分析潜在原因
检查影响销售的因素,如折扣率、物流模式等,找出可能导致低销售或低利润的原因。例如,某些区域的运输方式可能导致成本上升,从而影响利润。

# 计算每个地区的销售额和利润总和,结果按地区分组显示
# 对 'Sales' 和 'Profit' 列求和,并重置索引以便于阅读
regional_performance = data.groupby('Region')[['Sales', 'Profit']].sum().reset_index()

# 设置显示选项,避免使用科学计数法显示数值
pd.set_option('display.float_format', '{:.2f}'.format)

# 筛选出利润为负的地区,这些地区表现较差,可能存在问题
low_performance = regional_performance[regional_performance['Profit'] < 0]
# 打印低绩效地区的数据
print("低绩效地区:")
print(low_performance)

# 筛选出利润为正的地区,这些地区表现较好
high_performance = regional_performance[regional_performance['Profit'] > 0]
# 打印高绩效地区的数据
print("\n高绩效地区:")
print(high_performance)

# 对低绩效区域进行进一步分析,根据运输模式分组,计算各运输模式的销售额
# 这里通过使用 isin() 函数过滤出低绩效地区的数据,并按地区和运输模式分组
potential_issues = data[data['Region'].isin(low_performance['Region'])].groupby(['Region', 'Ship Mode'])['Sales'].sum().reset_index()
# 打印低绩效区域不同运输模式下的销售额,以分析可能的原因
print("\n低绩效地区的运输模式销售情况:")
print(potential_issues)

在这里插入图片描述
低绩效地区
输出结果为空,即没有任何地区的利润为负。即所有地区的销售额都产生了正利润。表明公司在各个地区的业务整体上是盈利的。

高绩效地区。销售额最高的地区是 Central(中部),而销售额相对较低的加拿大和东南亚也实现了一定的利润率。

由于数据集中没有低绩效地区,因此在按运输模式分析低绩效区域的销售情况时,也没有对应的数据输出。

表明公司各区域的运营策略和市场表现整体较为健康。

2.1.4 再进一步

各地区的订单数量和平均订单金额
# 计算各地区的订单数量和平均订单金额
order_counts = data.groupby('Region')['Order ID'].nunique().reset_index().rename(columns={'Order ID': 'Order Count'})
average_order_value = data.groupby('Region')['Sales'].mean().reset_index().rename(columns={'Sales': 'Avg Order Value'})

# 合并并查看结果
regional_orders = pd.merge(order_counts, average_order_value, on='Region')
print(regional_orders)

在这里插入图片描述
Central 地区的订单数量最多,说明这个地区的客户活跃度最高。
Central Asia 和 North Asia 的平均订单金额较高,说明这些地区的每笔订单价值较大,销售的多为高价产品

按客户群体分析销售额和利润
# 按客户群体分析销售额和利润
segment_performance = data.groupby('Segment')[['Sales', 'Profit']].sum().reset_index()
print(segment_performance)

在这里插入图片描述

从结果中可以看出来,Consumer 是最大的销售和利润来源,大众消费者是企业的主要市场。公司客户和家庭办公室的销售额和利润明显低于这个群体。

折扣率和利润
# 折扣率和利润之间的关系
discount_impact = data.groupby('Discount')[['Sales', 'Profit']].mean().reset_index()
print(discount_impact)

在这里插入图片描述
随着折扣率的增加,利润逐渐变为负值,尤其是折扣率超过 0.3 后,大部分的利润都出现了亏损。这说明高折扣策略虽然提升了销售额,但压缩了利润,甚至导致亏损。因此,应谨慎使用高折扣,在销售增长与利润之间的关系平衡上要权衡。

产品类别和子类别的销售和利润
# 按产品类别和子类别分析
category_subcategory = data.groupby(['Category', 'Sub-Category'])[['Sales', 'Profit']].sum().reset_index()
print(category_subcategory)

在这里插入图片描述
家具类(Furniture) 中,Tables 子类别出现了较大的亏损,说明这个产品可能存在问题(如高成本、低需求或高折扣)。
技术类(Technology) 的 Copiers 是高利润的产品,市场表现优异。
整体来看,不同类别的产品利润差异较大,应聚焦高利润产品,优化低利润或亏损产品的运营策略

本小节小结

  • 各地区、客户群体、产品类别的销售和利润情况,能够反映主要贡献者和问题所在
  • 折扣策略对利润的负面影响较大,应当平衡折扣和利润
  • 细分分析可以看出来高利润和低利润产品
  • 其他,例如,可以按照地区和客户群体表现分析,分析每个区域的客户群体的表现,有助于了解不同区域的市场需求差异;可以进一步寻找高折扣但仍然营利的产品组合,优化折扣策略等。

2.2 销售预测

预测性分析,基于历史销售数据预测未来的销售额趋势

2.2.1 步骤

提取销售日期和销售额,按时间顺序排序
构建时间序列模型,使用历史销售数据构建时间序列模型
使用模型预测未来几个月的销售额

import pandas as pd
import numpy as np
from statsmodels.tsa.holtwinters import ExponentialSmoothing
import matplotlib.pyplot as plt
from scipy.ndimage import uniform_filter1d

# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 解析日期并确保日期格式正确
data['Order Date'] = pd.to_datetime(data['Order Date'], dayfirst=True)
# 按日期汇总销售数据,得到时间序列
sales_time_series = data.groupby('Order Date')['Sales'].sum().reset_index()

# 数据预处理:平滑数据并进行对数变换,减少波动
# 平滑处理:使用均值平滑来减少数据中的极端波动
sales_time_series['Sales_Smoothed'] = uniform_filter1d(sales_time_series['Sales'], size=3)
# 平滑销售数据,减少极端值和噪声对模型的影响,使用窗口大小为3的滑动均值

sales_time_series['Sales_Smoothed'] = sales_time_series['Sales_Smoothed'].clip(lower=1)  # 确保最小值为1
# 将平滑后的销售数据最小值设为1,使得对数变换不产生负无穷

sales_time_series['Sales_Log'] = np.log(sales_time_series['Sales_Smoothed'])
# 平滑后的销售数据取对数,使得模型更容易你和趋势和季节性变化


# 构建并拟合时间序列模型
# 使用较简单的趋势和季节性设置,减少数值波动带来的影响
model = ExponentialSmoothing(
    sales_time_series['Sales_Log'], 
    trend='add', 
    seasonal='add', 
    seasonal_periods=12,
    use_boxcox=False, 
    initialization_method='estimated'
)

# 拟合模型
model_fit = model.fit(remove_bias=True)

# 预测未来12个月的销售额
forecast_log = model_fit.forecast(12)

# 将预测值从对数变换还原为实际值
forecast = np.exp(forecast_log)

# 绘制历史销售额和预测值
plt.figure(figsize=(12, 6))
plt.plot(sales_time_series['Order Date'], sales_time_series['Sales'], label='历史销售额')
plt.plot(pd.date_range(sales_time_series['Order Date'].max(), periods=12, freq='ME'), forecast, label='预测销售额', linestyle='--')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.title('销售额预测')
plt.legend()
plt.show()

2.2.2 分析

在这里插入图片描述
实线代表实际的历史销售数据,销售随时间的真实表现,包括季节性模式。显示2011-2015年期间,波动上升,存在高峰和低谷,可能与季节性因素、市场促销等想相关。虽然销售额整体上升,波动较为剧烈,每年的销售高峰和低谷期并不完全一致,季节性特征受到短期因素的影响

虚线代表未来12个月的销售预测值,显示了未来可能的走势比较稳定,有略微下降,模型认为上升趋势趋于平稳,可能由于处理历史季节性数据选择了平滑的加法模式,显示为平稳的预测线,季节性捕捉不足,也需要在模型中优化对季节性因素的识别,另一方面,应当对于可能的略微下降,保持警惕,如调整运营策略、优化产品组合等。

2.3 规范性分析

结合预测性分析,提供建议。假设,预测性分析显示未来销售平稳(假如模型已经调整过了,仍然是平稳的),那么可以减少因过度波动导致的库存压力,进行库存和定价优化。

假设我们要寻找定价策略,同时考虑库存成本和时长需求,最大化企业利润。

首先,需要获取产品的销售量、价格、成本等信息
其次,构建模型,假设用线性规划模型,定义目标函数(如利润),设定约束条件(例如库存水平、市场需求)
第三,求解优化问题,求出库存和定价

通过线性规划(Linear Programming)进行定价和库存优化的示例代码(和示例数据集无关)

import pandas as pd
from scipy.optimize import linprog

# 假设数据集中有以下信息:价格、成本、需求量(数据为示例)
# 可以从数据集中筛选或假设这些信息
prices = [20, 25, 30]  # 产品的三个定价选项
costs = [10, 12, 15]   # 对应的产品成本
demand = [100, 80, 60]  # 不同定价下的市场需求量

# 定义目标函数:利润 = (价格 - 成本) * 需求
profit_coefficients = [(price - cost) for price, cost in zip(prices, costs)]
# 定义约束:库存数量
A = [[1, 1, 1]]  # 约束系数矩阵,表示每个产品的需求消耗库存
b = [150]  # 约束条件,总库存量

# 使用线性规划求解最大利润问题
# 将 method 修改为 'highs',以使用更新的求解器
result = linprog(c=-1 * pd.Series(profit_coefficients), A_ub=A, b_ub=b, method='highs')

# 输出最优解
optimal_prices = [prices[i] for i, x in enumerate(result.x) if x > 0]
optimal_profit = -result.fun
print(f"最优定价策略: {optimal_prices}")
print(f"预计最大利润: {optimal_profit}")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nature:最大扩散强化学习

转自&#xff1a;清熙 强化学习&#xff08;RL&#xff09;智能体&#xff08;Agent&#xff09;常常很难在现实世界中广泛部署&#xff1a;初始化差异影响大&#xff0c;样本效率低下&#xff0c;情境之外难以泛化。 研究发现问题的关键是违反了数据独立同分布 (iid) 的假设…

驱动(RK3588S)第六课时:linux2.6的使用与GPIO子系统的使用

目录 一、Linux2.6 字符设备驱动编写框架1、合成一个完整的设备号函数2、从完整的设备号里提取主设备号3、动态申请设备号4、静态申请设备号5、释放申请的设备号6、Linux2.6 字符设备驱动的核心结构体7、初始化核心结构体8、向内核去申请 linux2.6 字符设备9、释放申请的设备10…

Linux实验报告2-初步使用shell

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 1 请指出下面每条命令中哪部分是命令名、选项和参数 3 以列表及递归方式查看/dev目录下的文件。 4 修改当前系统时间为2015年1月1日。 7 查看/tmp目录下的所有文件&#xff0c;指出哪些属于隐藏文件。 8 统计文件/e…

Kaggle竞赛:Rossmann Store Sales第66名策略复现

之前做过一次Kaggle的时间序列竞赛数据集练习&#xff1a;CSDN链接效果并不理想&#xff0c;之后在Kaggle的评论中又找到了各式各样的模型方法&#xff0c;其中我还手动还原过第三名的Entity Embedding&#xff1a;CSDN链接。这个参赛方法中&#xff0c;使用了除了比赛给出的数…

MySQL之UDF提权复现

什么是UDF&#xff1a; UDF(Userfined function)用户自定义函数&#xff0c;是MySQL的一个扩展接口&#xff0c;用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能&#xff0c;其添加的新函数都可以在 SQL 语句中调用。 提权条件&#xff1a; 知道MySQL用户名和密码…

探索 Nuxt Devtools:功能全面指南

title: 探索 Nuxt Devtools:功能全面指南 date: 2024/9/3 updated: 2024/9/3 author: cmdragon excerpt: 摘要:本文介绍了Nuxt Devtools的功能和使用方法,包括自动安装、手动安装和各项主要功能,如页面、组件、构建分析等。 categories: 前端开发tags: NuxtDevtools前端…

【AI】Pytorch_损失函数优化器

建议点赞收藏关注&#xff01;持续更新至pytorch大部分内容更完。 本文已达到10w字&#xff0c;故按模块拆开&#xff0c;详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 损失函数创建损失函数 &#xff08;共18个&#xff09;nn.CrossEnt…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题&#xff0c;目标是开发一个计算模型&#xff0c;用于计算任意语义类别的对象数量&#xff0c;使用任意数量的“样本”&#xff08;即可能为零样本或少样本计数&#xff09;。作者提出了一个新颖的基于Transformer的架构&#xff0c;称为…

【前端面试】leetcode树javascript

写一个树 // 定义二叉树节点 function TreeNode(val, left, right) {this.val = (val === undefined ? 0 : val)this.left = (left === undefined ? null : left)this.right = (right === undefined ? null : right) }// 示例使用 const root = new TreeNode(1,new TreeNod…

Javaweb开发总结(2)

1.处理项目中的异常 利用全局异常处理器 单独创建一个类来处理全局的异常&#xff0c;并对其做出相应回应 /* * 全局异常处理器 * */ RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class)//代表我们要捕获所有异常public Result ex…

STL-string对字符串进行操作

C形式下的字符串:c_str() string s1("hello"); const char* str s1.c_str(); while (*str) {cout << *str << " ";str; } cout << "\n"; 获取字符数组首地址&#xff0c;用C字符串的形式遍历 区别&#xff1a; cout <…

c++实现生产者消费者的供需关系

一、生产者&消费者模式 生产者-消费者模式&#xff08;Producer-Consumer Pattern&#xff09;是一种常见的并发设计模式&#xff0c;这种模式最常见&#xff0c;所以把它单独拿出来&#xff0c;这种模式用于处理生产者和消费者之间的协调问题。生产者和消费者之间不直接关…

leveldb源码解析(一)——编解码

leveldb中&#xff0c;数字的存储统一采用小端序&#xff0c;通过对数字编码和压缩&#xff0c;节省了存储空间。 变长编码 小端序中&#xff0c;每个字节的最低位存储状态&#xff0c;其余7位存储数据。 status状态值说明&#xff1a; 1&#xff1a;该字节不是当前数字最后…

《Few-shot Object Counting and Detection》CVPR2022

概述 摘要&#xff1a; 论文提出了一个新的任务——少量样本目标计数和检测&#xff08;Few-shot Object Counting and Detection, FSCD&#xff09;。在这项任务中&#xff0c;研究者们旨在通过给定少量目标类别的示例边界框来计数和检测图像中所有目标对象。这项任务与少量样…

Your connection to this site is not secure

chrome 打开某一个网站的网页地址栏提示Your connection to this site is not secure,同一个网站的其它地址栏打开不会 无效的方案 浏览器地址栏输入: chrome://flags 找到下边的选项&#xff0c;从Default改为Disabled即可成功解决 亲测这个方法不行 解决方案 点击右上角的3个…

力扣每日一题 一个小组的最大实力值 线性DP

Problem: 2708. 一个小组的最大实力值 &#x1f468;‍&#x1f3eb; 灵神题解 class Solution {public long maxStrength(int[] nums) {// 初始化mn和mx为第一个元素的值long mn nums[0];long mx nums[0];// 从第二个元素开始遍历数组for (int i 1; i < nums.length; i…

vue项目生成插件的LICENSE文件

一、安装license-webpack-plugin npm install --save-dev license-webpack-plugin 二、添加webpack配置 const {LicenseWebpackPlugin} require(license-webpack-plugin)module.exports {configureWebpack: {plugins: [new LicenseWebpackPlugin()]} }三、执行npm run buil…

jpg图片怎么转换成png?值得推荐给大家的几种转换方法

jpg图片怎么转换成png&#xff1f;将jpg图像转换为png格式可以显著提升图像的质量和清晰度&#xff0c;并满足一些特殊需求&#xff0c;例如透明背景。png格式采用无损压缩&#xff0c;这意味着图像在转换过程中不会丢失任何细节或质量&#xff0c;相比于jpg的有损压缩&#xf…

day06 1.继承和多态

#include "work.h"Stack:: Stack():size(10) {data new char[size];top -1;cout <<"无参构造"<<endl; }Stack:: Stack(const char* s) {size strlen(s);data new char[size];strcpy(data,s);top size-1;cout <<"有参构造"…

Android之Handler的post方法和sendMessage的区别

目录 post 方法方法特点 sendMessage 方法方法特点 使用场景区别总结 Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务&#xff1a;通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。 post 方法 方…