Hướng dẫn probit plot python - con trăn âm mưu probit

7 phút đọc

Hướng dẫn probit plot python - con trăn âm mưu probit

Các sơ đồ probit là một công cụ trực quan hóa dữ liệu thường được sử dụng trong ngành dầu khí để phân tích phân phối xác suất. Chúng rất hữu ích để đánh giá sự không chắc chắn và rủi ro trong quá trình khám phá chơi, đánh giá diện tích, lập kế hoạch phát triển và ước tính dự trữ.

Trong bài đăng này, tôi sẽ bao gồm một biểu đồ probit là gì và làm thế nào để tạo một bản bằng cách sử dụng dữ liệu và python của riêng bạn. Chúng tôi sẽ sử dụng Thư viện Python mpl-probscale. Nhiều số liệu và giải thích dưới đây được lấy cảm hứng từ tài liệu mpl-probscale, vì vậy hãy chắc chắn kiểm tra xem xét để biết thêm thông tin. MPL-Probscale cung cấp các cải tiến cho Matplotlib, một thư viện âm mưu Python. Bài đăng này không có nghĩa là một hướng dẫn matplotlib; Đối với điều đó, tôi khuyên bạn nên đọc qua bài đăng này và một số tài nguyên khác trên trang tài nguyên của tôi.

Cốt truyện Probit là gì?

Một biểu đồ probit là một biểu đồ tần số tích lũy trong đó trục y hoặc trục tần số tích lũy, được chuyển đổi bởi phân phối bình thường (còn gọi là hàm probit của Hồi giáo). Khái niệm này tương tự như thang đo logarit quen thuộc hơn. Giống như khi vẽ dữ liệu trên thang đo logarit trong đó khoảng cách giữa các trục trục được xác định bởi hàm log(), khoảng cách giữa các ve trên thang đo probit được xác định bởi hàm probit. Điều này có nghĩa là các điểm dữ liệu nằm gần đuôi của phân phối cách nhau xa hơn so với các điểm dữ liệu ở giữa. Ví dụ, lưu ý, trên thang đo probit trong hình bên dưới rằng khoảng cách giữa 0,5 và 1,0 ve tương đương với khoảng cách giữa 40 và 50 ve.

Hướng dẫn probit plot python - con trăn âm mưu probit

Các sơ đồ xác suất tích lũy giúp dễ dàng xác định xác suất dữ liệu được rút ra từ phân phối trực quan sẽ giảm trên hoặc dưới một giá trị nhất định hoặc nằm trong một phạm vi nhất định. Trực quan hóa dữ liệu tần số tích lũy trên thang đo Probit có tất cả các lợi ích của việc sử dụng các ô tần số tích lũy trên thang đo tuyến tính nhưng với một vài tính năng bổ sung. Khi dữ liệu được rút ra từ một phân phối bình thường tiêu chuẩn được vẽ trên trục probit so với trục tuyến tính, nó sẽ vẽ dọc theo một đường thẳng. Khi dữ liệu được rút ra từ phân phối lognatur được vẽ trên trục probit so với trục logarit, nó cũng sẽ rơi dọc theo một đường thẳng. Bởi vì các bản phân phối bình thường và logn thường được tìm thấy trong tự nhiên và là các phân phối tương đối đơn giản để mô hình, điều này tạo ra các sơ đồ probit các công cụ hữu ích để trực quan hóa dữ liệu.

Trong hình dưới đây, bạn có thể thấy sự khác biệt về hình dạng của cùng một dữ liệu, được rút ra từ một phân phối bình thường tiêu chuẩn, được vẽ trên thang xác suất tích lũy tuyến tính so với thang đo xác suất tích lũy.

Như đã được chứng minh trong hình, trực quan hóa dữ liệu trên biểu đồ probit cho phép bạn nhanh chóng đánh giá các xác suất vượt quá hoặc không quá mức và để đánh giá mức độ dữ liệu của bạn phù hợp với phân phối bình thường hoặc lognatural. Ngoài ra, vì các giá trị dữ liệu được kéo dài ở đuôi, các sơ đồ probit giúp dễ dàng hiểu được hành vi của phân phối ở các giá trị thấp và cao của xác suất vượt quá.

Cách tạo cốt truyện Probit bằng cách sử dụng Python

Để thực hiện âm mưu probit với Python, chúng tôi sẽ sử dụng các gói Python mpl-probscaleseaborn. Probscale cung cấp chức năng cực kỳ thuận tiện probscale.probplot để tạo ra các lô probit.

Chúng tôi sẽ bắt đầu bằng cách nhập các gói mà chúng tôi cần và sử dụng scipy.stats để tạo một mẫu dữ liệu ngẫu nhiên từ phân phối bình thường sang sơ đồ.

import probscale
import seaborn as sns

# Generate 20 random numbers from the normal distribution
from scipy.stats import norm
data = norm.rvs(size=20) 

Tạo ra một biểu đồ probit cơ bản dễ dàng như truyền dữ liệu cho hàm

probscale.probplot(data, probax='y')
sns.despine()
0 và cho nó biết trục nào mà thang đo probit sẽ tiếp tục. Chức năng Seaborn
probscale.probplot(data, probax='y')
sns.despine()
1 làm sạch cốt truyện và làm cho nó trông đẹp hơn.

probscale.probplot(data, probax='y')
sns.despine()

Một cốt truyện hoàn chỉnh hơn

Bây giờ chúng tôi có một biểu đồ probit cơ bản, hãy để tải một số dữ liệu mẫu và thêm một số tính năng vào cốt truyện để làm cho nó hoàn thiện hơn. Chúng tôi sẽ sử dụng chức năng

probscale.probplot(data, probax='y')
sns.despine()
2 để tải một số dữ liệu tổng hợp từ các tệp văn bản. Vì lợi ích của ví dụ này, dữ liệu thể hiện các giá trị phục hồi cuối cùng (EUR) ước tính trong hàng ngàn thùng dầu (MBO) cho 40 giếng từ hai lần chơi. Hai mươi là từ Play A, và hai mươi là từ Play B. Chúng tôi sẽ vẽ cả hai mẫu trên cùng một biểu đồ probit để so sánh các bản phân phối của chúng.

Mã để thực hiện cốt truyện được bao gồm dưới đây. Chúng tôi sẽ cần nhập

probscale.probplot(data, probax='y')
sns.despine()
3 để cho phép chúng tôi truy cập kiểu dữ liệu mảng và đọc dữ liệu từ các tệp. Chúng tôi cũng sẽ cần nhập
probscale.probplot(data, probax='y')
sns.despine()
4 để cho chúng tôi kiểm soát nhiều hơn các chi tiết của cốt truyện. Hàm probscale.probplot giống như trước đây, nhưng với một vài đối số nữa. Để xem một lời giải thích về các đối số, bạn có thể chuyển đến hàm
probscale.probplot(data, probax='y')
sns.despine()
6, hãy kiểm tra tài liệu.

Tùy thuộc vào quy ước nào bạn chọn, bạn có thể muốn lật nhãn trên tick trục y. Điều này sẽ phụ thuộc vào cách bạn nghĩ về xác suất P10 và P90. Theo mặc định,

probscale.probplot(data, probax='y')
sns.despine()
0 coi P10 để biểu thị giá trị dữ liệu mà bạn có 10 % cơ hội không vượt quá và P90 là giá trị dữ liệu mà bạn có 90 % cơ hội không vượt quá. Nói cách khác, 10 phần trăm dữ liệu của bạn nhỏ hơn hoặc bằng P10 và 90 phần trăm dữ liệu của bạn nhỏ hơn hoặc bằng P90. Nhiều người (và các công ty) thực hiện Công ước ngược lại: P10 nên đại diện cho giá trị mà bạn có 10 % cơ hội gặp gỡ hoặc vượt quá. Với quan điểm này, 10 phần trăm dữ liệu của bạn lớn hơn hoặc bằng P10. Nếu bạn tuân theo quy ước thứ hai, bạn sẽ cần đảo ngược các ve với dòng:

probscale.probplot(data, probax='y')
sns.despine()
8

Nếu bạn tuân theo quy ước đầu tiên, hãy để dòng này ra khỏi mã của bạn.

Phần còn lại của mã liên quan đến tính thẩm mỹ của cốt truyện: thêm các dòng tham chiếu và nhãn cho P10, P50 và P90, ghi nhãn các trục, tạo tiêu đề cốt truyện và thiết lập huyền thoại.

import probscale
import seaborn as sns

import matplotlib.pyplot as plt
import numpy as np

# Load data from file
a = np.loadtxt('./data/area_a.txt')
b = np.loadtxt('./data/area_b.txt')

# Set up the figure using matplotlib.pyplot
fig, ax = plt.subplots(figsize=(12,6))

# Plot and configure the first sample
probscale.probplot(a,
                   probax='y',
                   bestfit=True,
                   datascale='log',
                   label='Play A', # for the legend
                   ax=ax,
                   color='red'
                   )

# Plot and configure the second sample
probscale.probplot(b,
                   probax='y',
                   bestfit=True,
                   datascale='log',
                   label='Play B',
                   ax=ax,
                   color='blue'
                   )

# Select the ticks to label
ax.set_yticks([1, 2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 98, 99])

# Reverse the tick labels for the convention where P10 is the 90th percentile
ax.set_yticklabels(100 - ax.get_yticks())

# Add and annotate the P10, P50, and P90 lines
ax.axhline(90, color='k', linewidth=.5)
ax.axhline(50, color='k', linewidth=.5)
ax.axhline(10, color='k', linewidth=.5)

ax.annotate('P10', xy=(.9, .78), xycoords='axes fraction', fontsize=16)
ax.annotate('P50', xy=(.9, .51), xycoords='axes fraction', fontsize=16)
ax.annotate('P90', xy=(.9, .23), xycoords='axes fraction', fontsize=16)

# Add the title, axis labels, and the legend
ax.set_title('Probit Plot', fontsize=16)
ax.set_ylabel('Exceedance Probability')
ax.set_xlabel('Data Values')
ax.legend()

sns.despine()

Hình trên là biểu đồ probit với hai mẫu. Quan sát đầu tiên chúng ta có thể thực hiện vì cả hai đều tuyến tính và trục X nằm trên thang đo logarit là phân phối lognatural sẽ phù hợp để mô hình hóa cả hai bộ dữ liệu. Như đã đề cập ở trên, đó là một trong những lợi ích chính của việc trực quan hóa dữ liệu trên một biểu đồ probit.

Chúng tôi cũng có thể thực hiện một vài quan sát về các độ dốc và vị trí tương đối của mỗi bộ dữ liệu. Dòng phân phối của Play B được thay đổi sang bên phải chơi A (nhìn ở giữa, khoảng P60-P50 để kiểm tra điều này). Điều này có nghĩa là giá trị dự kiến ​​của EURS trong Play B cao hơn chơi A. Tuy nhiên, vì độ dốc của chơi B nông hơn nhiều so với độ dốc của Play A, có nhiều sự lây lan trong dữ liệu và sự không chắc chắn hơn trong EUR của một cuộc thi tốt trong chơi B. Tùy thuộc vào kích thước tổng thể của mỗi lần chơi, khả năng chịu rủi ro của bạn và khả năng tài trợ cho một vài giếng P90 hoạt động thấp từ Play B, bạn có thể chọn giá trị dự kiến ​​thấp hơn và rủi ro thấp hơn và chọn Phát triển chơi A.

Các sơ đồ probit là một công cụ hữu ích để trực quan hóa dữ liệu có thể được mô hình hóa với các phân phối lognatural hoặc bình thường. Chúng giúp dễ dàng khẳng định xác suất dữ liệu được rút ra từ các phân phối sẽ đáp ứng hoặc vượt quá một giá trị nhất định hoặc nằm trong một phạm vi nhất định và chúng là một sự cải thiện so với các đường cong xác suất tích lũy đơn giản đặc biệt là ở các phần phân phối. Hy vọng rằng bài đăng này là hữu ích trong việc chứng minh cách tạo chúng bằng cách sử dụng Python và gói mpl-probscale.