Hướng dẫn monte carlo simulation python - monte carlo mô phỏng trăn

Giới thiệu

Có nhiều mô hình tinh vi mà mọi người có thể xây dựng để giải quyết vấn đề dự báo. Tuy nhiên, chúng thường gắn bó với các mô hình Excel đơn giản dựa trên các giá trị lịch sử trung bình, trực giác và một số phương pháp phỏng đoán cụ thể về miền cấp cao. Cách tiếp cận này có thể đủ chính xác cho vấn đề trong tay nhưng có những lựa chọn thay thế có thể bổ sung thêm thông tin vào dự đoán với số lượng hợp lý của & NBSP; nỗ lực.

Một cách tiếp cận có thể tạo ra sự hiểu biết tốt hơn về phạm vi kết quả tiềm năng và giúp tránh lỗ hổng của trung bình, là một mô phỏng Monte Carlo. Phần còn lại của bài viết này sẽ mô tả cách sử dụng Python với Gandas và Numpy để xây dựng mô phỏng Monte Carlo để dự đoán phạm vi giá trị tiềm năng cho ngân sách bồi thường bán hàng. Cách tiếp cận này có nghĩa là đủ đơn giản để nó có thể được sử dụng cho các vấn đề khác mà bạn có thể gặp phải nhưng cũng đủ mạnh để cung cấp những hiểu biết mà mô hình cơ bản của Gut Gut-cảm giác không thể cung cấp trên chính nó.

Problem Background

Trong ví dụ này, chúng tôi sẽ cố gắng dự đoán chúng tôi nên ngân sách bao nhiêu tiền cho hoa hồng bán hàng trong năm tới. Vấn đề này rất hữu ích cho việc mô hình hóa vì chúng tôi có một công thức được xác định để tính toán hoa hồng và chúng tôi có thể có một số kinh nghiệm với hoa hồng năm trước & NBSP; thanh toán.

Vấn đề này cũng rất quan trọng từ góc độ kinh doanh. Hoa hồng bán hàng có thể là một chi phí bán hàng lớn và điều quan trọng là lập kế hoạch phù hợp cho chi phí này. Ngoài ra, việc sử dụng mô phỏng Monte Carlo là một cải tiến tương đối đơn giản có thể được thực hiện để tăng cường những gì thường là một ước tính không tinh vi & NBSP;

Trong ví dụ này, Ủy ban bán hàng mẫu sẽ trông như thế này đối với việc bán hàng 5 người & NBSP; lực lượng: lực lượng:

Trong ví dụ này, Ủy ban là kết quả của điều này & NBSP; Công thức:

Số tiền hoa hồng = bán hàng thực tế * hoa hồng & nbsp; tỷ lệ

Tỷ lệ hoa hồng dựa trên phần trăm này để lên kế hoạch & nbsp; bảng:

Trước khi chúng tôi xây dựng một mô hình và chạy mô phỏng, hãy để Lôi xem xét một cách tiếp cận đơn giản để dự đoán vào năm tới của Ủy ban & NBSP;

Cách tiếp cận ngây thơ đối với & nbsp; vấn đề

Hãy tưởng tượng nhiệm vụ của bạn là nhà phân tích Amy hoặc Andy là nói với tài chính bao nhiêu ngân sách cho hoa hồng bán hàng cho năm tới. Một cách tiếp cận có thể là cho rằng mọi người thực hiện 100% mục tiêu của họ và kiếm được tỷ lệ hoa hồng 4%. Cắm các giá trị này vào excel mang lại & nbsp; này:

Hãy tưởng tượng bạn trình bày điều này để tài chính, và họ nói, chúng tôi không bao giờ có mọi người nhận được tỷ lệ hoa hồng tương tự. Chúng tôi cần một mô hình chính xác hơn & nbsp;

Đối với vòng hai, bạn có thể thử một vài & nbsp; phạm vi:

Hoặc một & nbsp; một:

Bây giờ, bạn có thêm một chút thông tin và quay lại tài chính. Lần này tài chính cho biết, phạm vi này rất hữu ích nhưng sự tự tin của bạn trong phạm vi này là gì? Ngoài ra, chúng tôi cần bạn làm điều này cho một lực lượng bán hàng là 500 người và mô hình hóa một số mức giá khác nhau để xác định số tiền cho ngân sách. Hmmm… Bây giờ, bạn & nbsp; làm gì?

Cách tiếp cận đơn giản này minh họa phương pháp lặp cơ bản cho mô phỏng Monte Carlo. Bạn lặp lại trong quá trình này nhiều lần để xác định một loạt các giá trị hoa hồng tiềm năng trong năm. Làm điều này bằng tay bằng tay là một thách thức. May mắn thay, Python làm cho cách tiếp cận này nhiều & nbsp; đơn giản hơn.

Monte Carlo

Bây giờ chúng tôi đã đề cập đến vấn đề ở cấp độ cao, chúng tôi có thể thảo luận về cách phân tích Monte Carlo có thể là một công cụ hữu ích để dự đoán chi phí hoa hồng cho năm tới. Ở cấp độ đơn giản nhất, phân tích Monte Carlo [hoặc mô phỏng] liên quan đến việc chạy nhiều kịch bản với các đầu vào ngẫu nhiên khác nhau và tóm tắt phân phối & nbsp; kết quả.

Sử dụng phân tích hoa hồng, chúng tôi có thể tiếp tục quy trình thủ công mà chúng tôi đã bắt đầu ở trên nhưng chạy chương trình 100 100 hoặc thậm chí 1000 lần và chúng tôi sẽ nhận được phân phối số tiền hoa hồng tiềm năng. Phân phối này có thể thông báo cho khả năng rằng chi phí sẽ nằm trong một cửa sổ nhất định. Vào cuối ngày, đây là một dự đoán vì vậy chúng tôi có thể sẽ không bao giờ dự đoán chính xác nó. Chúng ta có thể phát triển một ý tưởng thông tin hơn về rủi ro tiềm năng của dưới hoặc trên & nbsp; ngân sách.

Có hai thành phần để chạy Monte Carlo & NBSP; Mô phỏng:

  • phương trình để & nbsp; đánh giá
  • các biến ngẫu nhiên cho & nbsp; đầu vào

Chúng tôi đã mô tả phương trình trên. Bây giờ chúng ta cần suy nghĩ về cách thực hiện các biến ngẫu nhiên & nbsp;

Một cách tiếp cận đơn giản sẽ là lấy một con số ngẫu nhiên từ 0% đến 200% [đại diện cho trực giác của chúng tôi về tỷ lệ hoa hồng]. Tuy nhiên, vì chúng tôi trả hoa hồng mỗi năm, chúng tôi hiểu vấn đề của chúng tôi chi tiết hơn một chút và có thể sử dụng kiến ​​thức trước đó để xây dựng mô hình chính xác hơn & NBSP;

Bởi vì chúng tôi đã thanh toán hoa hồng trong vài năm, chúng tôi có thể xem xét một phân phối lịch sử điển hình của phần trăm cho & nbsp; mục tiêu:

Phân phối này trông giống như phân phối bình thường với giá trị trung bình 100% và độ lệch chuẩn là 10%. Cái nhìn sâu sắc này rất hữu ích vì chúng tôi có thể mô hình hóa phân phối biến đầu vào của mình để nó tương tự như thế giới thực & nbsp; kinh nghiệm.

Nếu bạn quan tâm đến các chi tiết bổ sung để ước tính loại phân phối, tôi đã tìm thấy bài viết này & nbsp; thú vị.

Xây dựng một Python & NBSP;

Chúng ta có thể sử dụng gấu trúc để xây dựng một mô hình sao chép tính toán bảng tính Excel. Có những cách tiếp cận Python khác để xây dựng các mô hình Monte Carlo nhưng tôi thấy rằng phương pháp Pandas này dễ hiểu về mặt khái niệm nếu bạn đến từ một nền tảng Excel. Nó cũng có thêm lợi ích của việc tạo ra các khung dữ liệu gấu trúc có thể được kiểm tra và xem xét cho & nbsp; tính hợp lý.

Trước tiên, hãy hoàn thành nhập khẩu của chúng tôi và đặt âm mưu & nbsp; style:

import pandas as pd
import numpy as np
import seaborn as sns

sns.set_style['whitegrid']

Đối với mô hình này, chúng tôi sẽ sử dụng một tạo số ngẫu nhiên từ Numpy. Khía cạnh tiện dụng của Numpy là có một số trình tạo số ngẫu nhiên có thể tạo các mẫu ngẫu nhiên dựa trên phân phối & NBSP được xác định trước.

Như đã mô tả ở trên, chúng tôi biết rằng phần trăm lịch sử của chúng tôi cho hiệu suất mục tiêu tập trung vào khoảng trung bình 100% và độ lệch chuẩn là 10%. Hãy để xác định các biến đó cũng như số lượng đại diện bán hàng và mô phỏng mà chúng tôi đang & NBSP; Mô hình hóa:

avg = 1
std_dev = .1
num_reps = 500
num_simulations = 1000

Bây giờ chúng ta có thể sử dụng Numpy để tạo danh sách tỷ lệ phần trăm sẽ tái tạo lịch sử của chúng ta bình thường & nbsp; phân phối:

pct_to_target = np.random.normal[avg, std_dev, num_reps].round[2]

Trong ví dụ này, tôi đã chọn làm tròn nó đến 2 số thập phân để làm cho nó rất dễ dàng để xem các ranh giới & nbsp;

Đây là những gì 10 mục đầu tiên nhìn & nbsp; như:

array[[0.92, 0.98, 1.1 , 0.93, 0.92, 0.99, 1.14, 1.28, 0.91, 1.  ]]

Đây là một kiểm tra nhanh tốt để đảm bảo các phạm vi nằm trong & nbsp;

Vì chúng tôi đang cố gắng cải thiện cách tiếp cận đơn giản của mình, chúng tôi sẽ gắn bó với phân phối bình thường cho phần trăm để nhắm mục tiêu. Bằng cách sử dụng Numpy, chúng ta có thể điều chỉnh và sử dụng phân phối khác cho các mô hình trong tương lai nếu chúng ta phải. Tuy nhiên, tôi cảnh báo rằng bạn không nên sử dụng các mô hình khác mà không thực sự hiểu chúng và cách chúng áp dụng cho tình huống của bạn.

Có một giá trị khác mà chúng ta cần mô phỏng và đó là mục tiêu bán hàng thực tế. Để minh họa một phân phối khác, chúng tôi sẽ giả định rằng phân phối mục tiêu bán hàng của chúng tôi trông giống như & nbsp; điều này:

Đây chắc chắn không phải là một phân phối bình thường. Phân phối này cho chúng ta thấy rằng các mục tiêu bán hàng được đặt thành 1 trong 6 thùng và tần số thấp hơn khi số tiền tăng. Phân phối này có thể là dấu hiệu của một quy trình thiết lập mục tiêu rất đơn giản trong đó các cá nhân được đưa vào một số nhóm nhất định và được đưa ra các mục tiêu liên tục dựa trên nhiệm kỳ, quy mô lãnh thổ hoặc doanh số của họ & NBSP;

Vì lợi ích của ví dụ này, chúng tôi sẽ sử dụng phân phối đồng đều nhưng chỉ định tỷ lệ xác suất thấp hơn cho một số giá trị & nbsp;

Đây là cách chúng ta có thể xây dựng điều này bằng cách sử dụng

avg = 1
std_dev = .1
num_reps = 500
num_simulations = 1000
1

sales_target_values = [75_000, 100_000, 200_000, 300_000, 400_000, 500_000]
sales_target_prob = [.3, .3, .2, .1, .05, .05]
sales_target = np.random.choice[sales_target_values, num_reps, p=sales_target_prob]

Phải thừa nhận rằng đây là một ví dụ hơi giả tạo nhưng tôi muốn cho thấy cách các phân phối khác nhau có thể được kết hợp vào mô hình & NBSP của chúng tôi.

Bây giờ chúng tôi đã biết cách tạo hai bản phân phối đầu vào của mình, hãy để Lôi xây dựng một gấu trúc & nbsp; dataFrame:

df = pd.DataFrame[index=range[num_reps], data={'Pct_To_Target': pct_to_target,
                                               'Sales_Target': sales_target}]

df['Sales'] = df['Pct_To_Target'] * df['Sales_Target']

Đây là những gì DataFrame mới của chúng tôi trông & nbsp; như:

Pct_To_TargetSales_TargetViệc bán hàng01234
0.92 100000 92000.0
0.98 75000 73500.0
1.10 500000 550000.0
0.93 200000 186000.0
0.92 300000 276000.0

Bạn có thể nhận thấy rằng tôi đã thực hiện một mẹo nhỏ để tính toán số tiền bán hàng thực tế. Đối với vấn đề này, số tiền bán hàng thực tế có thể thay đổi rất nhiều trong nhiều năm nhưng phân phối hiệu suất vẫn phù hợp đáng kể. Do đó, tôi đã sử dụng các bản phân phối ngẫu nhiên để tạo đầu vào của mình và sao lưu vào doanh số thực tế & nbsp;

Món mã cuối cùng chúng ta cần tạo là một cách để ánh xạ

avg = 1
std_dev = .1
num_reps = 500
num_simulations = 1000
2 của chúng ta theo tỷ lệ hoa hồng. Đây là & nbsp; hàm:

def calc_commission_rate[x]:
    """ Return the commission rate based on the table:
    0-90% = 2%
    91-99% = 3%
    >= 100 = 4%
    """
    if x 

Bài Viết Liên Quan

Chủ Đề