Tác giả: Hoàng Đức Anh | 2019-06-15
Trong quá trình phân tích bán hàng, phếu bán hàng (sale funnel) là một kỹ thuật rất hữu dụng để trực quan hóa kết quả kinh doanh theo từng nhóm. Tuy nhiên, hiện ít có biểu đồ nào thể hiện được phễu bán hàng một cách hiệu quả trên R.
Trong bài viết này, RAnalytics
sẽ hướng dẫn một ví dụ thực tiễn trực quan hóa phễu bán hàng một cách hiệu quả.
Xem ví dụ điển hình về phễu bán hàng dưới đây
data <- read.table(textConnection(
c("step;segment1;segment2;segment3;total
1_visit;1806;11663;12641;26110
2_register;1143;6476;5372;12991
3_login;1806;11663;2694;16163
4_subscribe;21;3322;2694;6037
5_paid;259;422;41;722")),
header = T, sep = ";")
# Dữ liệu
data
## step segment1 segment2 segment3 total
## 1 1_visit 1806 11663 12641 26110
## 2 2_register 1143 6476 5372 12991
## 3 3_login 1806 11663 2694 16163
## 4 4_subscribe 21 3322 2694 6037
## 5 5_paid 259 422 41 722
Trong tập dữ liệu trên, ta sẽ mô phỏng dữ liệu phếu bán hàng của 3 phân khúc khách hàng trên một trang thương mại điện tử mà trong đó, khách hàng sẽ đi qua năm bước khác nhau:
- Ghé thăm website (visit)
- Đăng ký (register)
- Đăng nhập (login)
- Đăng ký cập nhật các thông tin sản phẩm (subscribe)
- Mua hàng và trả tiền thành công (paid)
Để tạo một biểu đồ phễu bán hàng, ta sẽ thực hiện 3 bước lớn sau.
- Tạo
theme
cho biểu đồ - Tạo các biểu đồ con cho phễu bán hàng
- Kết hợp các biểu đồ để tạo thành phễu bán hàng hoàn chỉnh
# Gọi library
library(tidyverse)
library(reshape2)
library(forcats)
library(ggthemes)
# Tạo theme trông cho chart
funnel_theme <- theme(axis.title = element_blank(),
axis.ticks.x = element_blank(),
axis.text.x = element_blank(),
legend.position = "none",
panel.grid = element_blank()
)
# Phân rã dữ liệu
df <- data %>% melt(id.vars = "step")
# Tạo biểu đồ chính
p1 <- df %>%
mutate(step = fct_rev(step)) %>%
filter(variable != "total") %>%
ggplot(aes(step, value)) +
geom_bar(aes(fill = variable), stat = "identity") +
facet_grid(~variable, scale = "free") +
coord_flip() +
geom_text(aes(label = value),
position = position_stack(vjust = .5)) +
scale_fill_tableau() +
theme_minimal() +
scale_y_sqrt() +
funnel_theme +
theme(plot.margin=grid::unit(c(0,0,0,0), "mm")) +
theme(
axis.text.y = element_blank(),
strip.text = element_text(size = 14,
face = "bold")) +
theme(
panel.spacing = unit(0, "mm")) +
annotate("rect", xmin = 0.5, xmax = 1.5, ymin = 0, ymax = Inf,
alpha = .2) +
annotate("rect", xmin = 2.5, xmax = 3.5, ymin = 0, ymax = Inf,
alpha = .2) +
annotate("rect", xmin = 4.5, xmax = 5.5, ymin = 0, ymax = Inf,
alpha = .2) +
theme(axis.text.y = element_blank())
p1
- Tạo thêm phần
label
tổng theo từng segment
df %>%
mutate(step = fct_rev(step)) %>%
filter(variable == "total") %>%
ggplot(aes(step, 0)) +
geom_label(aes(label = value),
col = "white",
fill = "darkred",
size = 4) +
coord_flip() +
facet_wrap(~variable) +
theme_minimal() +
theme(axis.text = element_blank()) +
funnel_theme +
theme(
strip.text.x = element_blank()
) -> p2
p2
- Tạo thêm thứ tự các bước trong phễu bán hàng để dễ theo dõi hơn
df2 <- data.frame(step = data$step,
value = 1:5)
df2 %>%
mutate(step = fct_rev(step)) %>%
ggplot(aes(step, 1)) +
geom_hline(yintercept = 1) +
geom_point(size = 10, col = "darkgreen") +
geom_text(aes(label = value),
col = "white") +
coord_flip() +
theme_minimal() +
funnel_theme +
theme(
axis.text = element_text(size = 14)
) -> p3
p3
- Cuối cùng, ta có thể tạo ghép các biểu đồ rời rạc để tạo thành phễu bán hàng hoàn chỉnh. Việc kết hợp các biểu đồ trên
ggplot2
có thể hoàn thành một cách đơn giản vớiggplot2
#devtools::install_github("thomasp85/patchwork")
library(patchwork)
p3 +
labs(title = "Sale funnel for 3 segments") +
p1 + p2 +
plot_layout(nrow = 1, widths = c(1, 8, 1))
Như vậy, chúng ta đã hoàn thành phễu bán hàng rất chuyên nghiệp với ggplot2
. Phễu bán hàng này đặc biệt hiệu quả khi cùng lúc phải so sánh nhiều phân khúc khách hàng khác nhau trên toàn bộ chuỗi bán hàng. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!