From 44f78952d89caf54ec83a2a9b94ca5f81f0c9d78 Mon Sep 17 00:00:00 2001
From: HeHaonan <1822907900@qq.com>
Date: Thu, 22 Aug 2024 10:41:18 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/utils/request.js | 4 +-
.../components/basketAnalysis.vue | 220 ++++++------------
2 files changed, 67 insertions(+), 157 deletions(-)
diff --git a/src/utils/request.js b/src/utils/request.js
index f36818c..eb322f5 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -16,8 +16,8 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
// baseURL: import.meta.env.VITE_APP_BASE_API,
- // baseURL:'http://118.31.7.2:9868/',
- baseURL:'http://192.168.2.16:9868/',
+ baseURL:'http://118.31.7.2:9868/',
+ // baseURL:'http://192.168.2.16:9868/',
// 超时
timeout: 100000
})
diff --git a/src/views/portraitModel/components/basketAnalysis.vue b/src/views/portraitModel/components/basketAnalysis.vue
index 878abed..bbf0033 100644
--- a/src/views/portraitModel/components/basketAnalysis.vue
+++ b/src/views/portraitModel/components/basketAnalysis.vue
@@ -12,7 +12,8 @@
案例背景:
- 购物篮分析是指通过分析消费者在电商平台上的购物数据,了解他们购买商品之间的关联性,在做商品推荐和货架摆放布局时候,将关联度高的商品放一起捆绑销售,从而提升销售额。
+ 购物篮分析是指通过分析消费者在电商平台上的购物数据,了解他们购买商品之间的关联性,在做商品推荐和货架摆放布局时候,将关联度高的商品放一起捆绑销售,从而提升销售额。
+
现有某购物商场的购物篮数据,请分析两两搭配销售的价值。A、B、C、D分别代表不同的商品
@@ -26,24 +27,22 @@
backgroundColor: '#6A7DE9!important',
}"
>
-
-
-
-
-
-
-
-
+
+
+
+
下载数据
- 计算公式如下:
+ 计算公式如下:
+
1.支持度是指A和B两个商品同时被购买的概率,AB组合的支持度=同时包含A和B商品的订单数/总订单数*100%=P(A∩B)
2.置信度是指购买A之后又购买了B的条件概率,是买了A和B的订单占所有买了A的订单里的占比,A对B的置信度=P(A∩B)/P(A)
- 3.提升度是指在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比(置信度/无条件概率),A对B的提升度=A对B的置信度/P(B)。
+ 3.提升度是指在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比(置信度/无条件概率),A对B的提升度=A对B的置信度/P(B)。
+
一般而言,提升度如果小于1,则该推荐规则不应该被使用。
@@ -54,30 +53,21 @@
第一步,划分商品组合
- 根据购物篮A、B、C、D四种不同的商品,按照两两搭配的方式,可能有以下几种组合。
+ 根据购物篮A、B、C、D四种不同的商品,按照两两搭配的方式,可能有以下几种组合。
+
请按照A、B、C、D顺序依次两两组合:
-
+
—
-
+
@@ -85,14 +75,15 @@
-
添加组合
+
添加组合
商品组合
- - {{ item || "-" }}
+ -
+ {{ item }}
+ -
+
@@ -107,9 +98,7 @@
第二步,计算无条件概率
-
- 根据购物篮信息,计算A、B、C、D四种商品的无条件概率。
-
+
根据购物篮信息,计算A、B、C、D四种商品的无条件概率。
-
-
+
-
- %
+
+ %
@@ -145,7 +128,8 @@
第三步,计算支持度、置信度、提升度
- 按照第一步中的两两组合情况,依次计算各自组合的支持度、置信度、提升度。
+ 按照第一步中的两两组合情况,依次计算各自组合的支持度、置信度、提升度。
+
计算结果保留小数点后两位小数。
@@ -159,39 +143,23 @@
backgroundColor: '#6A7DE9!important',
}"
>
-
-
+
-
- %
+
+ %
-
- %
+
+ %
-
- %
+
+ %
@@ -205,8 +173,10 @@
第四步,判断两两搭配销售价值
- 当A对B的提升度>1,则表示买A再买B的概率大于本身买B的概率,就表示买A对买B带来了提升效果。
- 当A对B的提升度<1,则表示买A再买B的概率小于本身买B的概率,就表示买A对买B带来了负向效果。
+ 当A对B的提升度>1,则表示买A再买B的概率大于本身买B的概率,就表示买A对买B带来了提升效果。
+
+ 当A对B的提升度<1,则表示买A再买B的概率小于本身买B的概率,就表示买A对买B带来了负向效果。
+
当A对B的提升度 = 1,则代表买A对买B没有影响。
@@ -220,21 +190,10 @@
backgroundColor: '#6A7DE9!important',
}"
>
-
-
+
-
+
@@ -244,9 +203,7 @@
提交
-
- 进一步的分析,可以分析支持度最高top10的商品组合、置信度最高top10的商品组合、提升度最高top10的商品组合。
-
+
进一步的分析,可以分析支持度最高top10的商品组合、置信度最高top10的商品组合、提升度最高top10的商品组合。
@@ -254,26 +211,18 @@
第五步,制定营销策略
-
- 通过购物篮分析,能给实际销售带来的价值:
-
+ 通过购物篮分析,能给实际销售带来的价值:

-
优化商品配置:可以厘清哪些商品可以一起购买,关联商品可以优化陈列方式、进行促销等;
+
优化商品配置:可以厘清哪些商品可以一起购买,关联商品可以优化陈列方式、进行促销等;

-
了解客户需求:分析出顾客的购买习惯,顾客购买商品的时间、地点等;
-
+
了解客户需求:分析出顾客的购买习惯,顾客购买商品的时间、地点等;

-
分析销售趋势:利用数据仓库对品种和库存的趋势进行分析,选定需要补充的商品,研究顾客购买趋势,分析季节性购买模式,确定降价商品。
+
分析销售趋势:利用数据仓库对品种和库存的趋势进行分析,选定需要补充的商品,研究顾客购买趋势,分析季节性购买模式,确定降价商品。
@@ -297,7 +246,7 @@ const baseUrl = import.meta.env.VITE_APP_BASE_API;
const knowledgeHtml = ref(
`一、理解购物篮分析
购物篮分析是指通过分析消费者在电商平台上的购物数据,了解他们购买商品之间的关联性,从而发现潜在的消费行为和需求,为电商平台提供决策支持。通过购物篮分析,电商平台可以更好地理解用户的购物习惯和偏好,从而为用户提供更加精准的推荐和产品布局。
购物篮分析的关键衡量指标有三个:支持度、置信度、提升度
为了更好地解释这三个指标,这里我先跟大家举个例子,后续就用这个例子说明。
某超市30天订单数一共10000单,其中包含A商品的订单有600单,包含B商品的订单有400单,同时包含A和B两种商品的订单有300单。
购买A商品的概率 P(A)=(600/10000)*100%=6%
购买B商品的概率 P(B)=(400/10000)*100%=4%
同时购买A商品和B商品的概率 P(A∩B)=(300/10000)*100%=3%
1.支持度
支持度是指A和B两个商品同时被购买的概率,代表了这个组合的可靠程度。
AB组合的支持度=同时包含A和B商品的订单数/总订单数*100%
在本例中,AB组合的支持度=P(A∩B)=(300/10000) *100%=3%
2.置信度
置信度是指购买A之后又购买了B的条件概率,是买了A和B的订单占所有买了A的订单里的占比。代表买了A的用户有多大概率会再买B,既买A产品对B产品产生了多大的影响。
A对B的置信度=同时包含A和B商品的订单数/包含A商品的订单数*100%
在本例中,A对B的置信度=P(A∩B)/P(A)=(300/600)*100%=50%
3.提升度
A对B提升度=A对B的置信度/P(B),是指在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B 产品的可能性之比。
它的计算方法是:A对B的置信度/P(B)。提升度和置信度一样,也是一个条件概率。
当置信度>P(B)时,A对B的提升度>1,则表示买A再买B的概率大于本身买B的概率,就表示买A对买B带来了提升效果。
当置信度<P(B)时,A对B的提升度<1,则表示买A再买B的概率小于本身买B的概率,就表示买A对买B带来了负向效果。
当置信度等于P(B)时,A对B的提升度=1,则代表买A对买B没有影响。
在本例中,A对B的提升度=A对B的置信度/P(B)=50%/4%=12.5,表示商品A对商品B有较大的提升,有较大的搭配价值,建议搭配。
二、利用购物篮分析优化产品推荐
1. 推荐算法优化:根据用户的历史购物数据,结合用户画像和行为数据,制定更加精准的推荐算法。通过分析用户的购买行为,了解他们的购物习惯和偏好,为不同的用户提供个性化的推荐。
2. 动态推荐:根据用户在购物过程中的实时行为,实时调整推荐结果,确保推荐内容与用户需求高度匹配。
3. 推荐内容丰富度:除了商品推荐外,还可以考虑推荐相关服务、优惠券、套餐等,增加用户购物的丰富度和满意度。
三、利用购物篮分析优化产品布局
1. 商品分类优化:根据用户的购物习惯和偏好,对商品进行分类和布局,提高用户在搜索和浏览过程中的便利性。
2. 突出热销商品:通过分析用户的购买数据,了解哪些商品最受用户欢迎,将热销商品放在更加显眼的位置,提高用户的点击率和购买率。
3. 季节性商品布局:根据季节变化,提前布局相关季节性商品,提高用户在特定季节的购买欲望。
四、利用购物篮分析提升客户服务体验
1. 客户反馈处理:通过购物篮分析,了解用户对哪些商品、服务和功能存在不满,及时调整和优化,提高用户满意度。
2. 售后服务优化:针对购买后可能出现的问题和售后需求,提前做好应对措施和解决方案,提高用户的售后服务体验。
3. 个性化客服:针对不同用户的购物习惯和偏好,提供个性化的客服服务,提高用户对电商平台的信任度和忠诚度。
五、利用购物篮分析进行数据驱动的营销策略
1. 优惠券策略:根据用户的购物数据和习惯,制定个性化的优惠券策略,提高用户的购买意愿和转化率。
2. 组合营销:针对用户的购买行为和需求,制定有针对性的组合营销策略,提高用户的购买量和忠诚度。
3. 社交媒体推广:通过社交媒体平台,利用购物篮分析结果进行精准推广,提高品牌知名度和用户参与度。
`
);
-const list = ref(["-"]);
+const list = ref([]);
const combinationValue1 = ref("");
const combinationValue2 = ref("");
const dialogVisible = ref(false);
@@ -522,6 +471,9 @@ onMounted(() => {
onBeforeUnmount(() => {
saveData();
});
+const deleteItem = (index) => {
+ list.value.splice(index, 1);
+};
const moveUp = (index, row) => {
console.log("上移", index, row);
if (index > 0) {
@@ -543,7 +495,7 @@ const moveDown = (index, row) => {
}
};
const addCombination = () => {
- if (list.value[0] == "-") {
+ if (list.value[0] === "-") {
list.value = [];
}
// list.value = [];
@@ -596,20 +548,12 @@ const step3Submit = () => {
step3Error.value = 0;
for (let i in step3Data.value) {
// console.log(fileTable1.value[i]);
- if (
- !step3Data.value[i].params1 ||
- !step3Data.value[i].params2 ||
- !step3Data.value[i].params3
- ) {
+ if (!step3Data.value[i].params1 || !step3Data.value[i].params2 || !step3Data.value[i].params3) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
- if (
- step3Data.value[0].params1 &&
- step3Data.value[0].params1 !== "40" &&
- step3Data.value[0].params1 !== "40.00"
- ) {
+ if (step3Data.value[0].params1 && step3Data.value[0].params1 !== "40" && step3Data.value[0].params1 !== "40.00") {
step3Error.value++;
}
if (step3Data.value[0].params2 && step3Data.value[0].params2 !== "66.67") {
@@ -618,11 +562,7 @@ const step3Submit = () => {
if (step3Data.value[0].params3 && step3Data.value[0].params3 !== "111.11") {
step3Error.value++;
}
- if (
- step3Data.value[1].params1 &&
- step3Data.value[1].params1 !== "20" &&
- step3Data.value[1].params1 !== "20.00"
- ) {
+ if (step3Data.value[1].params1 && step3Data.value[1].params1 !== "20" && step3Data.value[1].params1 !== "20.00") {
step3Error.value++;
}
if (step3Data.value[1].params2 && step3Data.value[1].params2 !== "33.33") {
@@ -631,32 +571,16 @@ const step3Submit = () => {
if (step3Data.value[1].params3 && step3Data.value[1].params3 !== "41.67") {
step3Error.value++;
}
- if (
- step3Data.value[2].params1 &&
- step3Data.value[2].params1 !== "40" &&
- step3Data.value[2].params1 !== "40.00"
- ) {
+ if (step3Data.value[2].params1 && step3Data.value[2].params1 !== "40" && step3Data.value[2].params1 !== "40.00") {
step3Error.value++;
}
- if (
- step3Data.value[2].params2 &&
- step3Data.value[2].params2 !== "60.00" &&
- step3Data.value[2].params2 !== "60"
- ) {
+ if (step3Data.value[2].params2 && step3Data.value[2].params2 !== "60.00" && step3Data.value[2].params2 !== "60") {
step3Error.value++;
}
- if (
- step3Data.value[2].params3 &&
- step3Data.value[2].params3 !== "100.00" &&
- step3Data.value[2].params3 !== "100"
- ) {
+ if (step3Data.value[2].params3 && step3Data.value[2].params3 !== "100.00" && step3Data.value[2].params3 !== "100") {
step3Error.value++;
}
- if (
- step3Data.value[3].params1 &&
- step3Data.value[3].params1 !== "20" &&
- step3Data.value[3].params1 !== "20.00"
- ) {
+ if (step3Data.value[3].params1 && step3Data.value[3].params1 !== "20" && step3Data.value[3].params1 !== "20.00") {
step3Error.value++;
}
if (step3Data.value[3].params2 && step3Data.value[3].params2 !== "33.33") {
@@ -665,11 +589,7 @@ const step3Submit = () => {
if (step3Data.value[3].params3 && step3Data.value[3].params3 !== "41.67") {
step3Error.value++;
}
- if (
- step3Data.value[4].params1 &&
- step3Data.value[4].params1 !== "20" &&
- step3Data.value[4].params1 !== "20.00"
- ) {
+ if (step3Data.value[4].params1 && step3Data.value[4].params1 !== "20" && step3Data.value[4].params1 !== "20.00") {
step3Error.value++;
}
if (step3Data.value[4].params2 && step3Data.value[4].params2 !== "33.33") {
@@ -678,18 +598,10 @@ const step3Submit = () => {
if (step3Data.value[4].params3 && step3Data.value[4].params3 !== "55.56") {
step3Error.value++;
}
- if (
- step3Data.value[5].params1 &&
- step3Data.value[5].params1 !== "40" &&
- step3Data.value[5].params1 !== "40.00"
- ) {
+ if (step3Data.value[5].params1 && step3Data.value[5].params1 !== "40" && step3Data.value[5].params1 !== "40.00") {
step3Error.value++;
}
- if (
- step3Data.value[5].params2 &&
- step3Data.value[5].params2 !== "50.00" &&
- step3Data.value[5].params2 !== "50"
- ) {
+ if (step3Data.value[5].params2 && step3Data.value[5].params2 !== "50.00" && step3Data.value[5].params2 !== "50") {
step3Error.value++;
}
if (step3Data.value[5].params3 && step3Data.value[5].params3 !== "83.33") {
@@ -791,7 +703,10 @@ const getData = () => {
module: "购物篮分析",
})
.then((res) => {
- list.value = res.data.stepFiveA.split(",");
+ if (res.data.stepFiveA) {
+ list.value = res.data.stepFiveA.split(",");
+ }
+
step2Data.value[0].params = res.data.stepFiveB;
step2Data.value[1].params = res.data.stepFiveC;
step2Data.value[2].params = res.data.stepFiveD;
@@ -831,6 +746,7 @@ const getData = () => {
// step7Data.value[0].params = res.data.stepFourB;
// step7Data.value[1].params = res.data.stepFourC;
// step7Data.value[2].params = res.data.stepFourD;
+ // console.log(list.value);
})
.catch((error) => {});
};
@@ -847,17 +763,11 @@ const downloadData = () => {
};
const submitData = () => {
// console.log("asdasdasdsdsds");
- if (
- !step1AnswerFlag.value ||
- !step2AnswerFlag.value ||
- !step3AnswerFlag.value ||
- !step4AnswerFlag.value
- ) {
+ if (!step1AnswerFlag.value || !step2AnswerFlag.value || !step3AnswerFlag.value || !step4AnswerFlag.value) {
proxy.$modal.msgError("请先完成所有步骤!");
return;
}
- errorNum.value =
- step1Error.value + step2Error.value + step3Error.value + step4Error.value;
+ errorNum.value = step1Error.value + step2Error.value + step3Error.value + step4Error.value;
console.log(errorNum.value, "总错误次数");
portraitModel
.submit({