Lời nói đầu
Tiếp nối chương trước, chúng tôi đã xuất bản bài viết đầu tiên sê-ri bài “Xây dựng danh mục tài sản crypto tử mạnh mẽ bằng cách sử dụng chiến lược đa yếu tố” - Cơ sở lý thuyết .
Trước/sau khi tính toán dữ liệu hệ số và trước khi kiểm tra tính hợp lệ của một hệ số duy nhất, dữ liệu liên quan cần được xử lý. Quá trình tiền xử lý dữ liệu cụ thể bao gồm việc xử lý các giá trị trùng lặp, giá trị ngoại lệ/giá trị bị thiếu/giá trị cực trị, tiêu chuẩn hóa và tần suất dữ liệu .
1. Giá trị trùng lặp
Các định nghĩa liên quan đến dữ liệu:
Key: Đại diện cho một chỉ mục duy nhất. ví dụ: Đối với một phần dữ liệu có tất cả mã thông báo và tất cả ngày, khóa là "token_id/contract_address - date"
Giá trị: Đối tượng được lập chỉ mục bởi khóa được gọi là "giá trị".
Việc chẩn đoán các giá trị trùng lặp trước tiên đòi hỏi phải hiểu dữ liệu"nên" trông như thế nào. Thông thường dữ liệu có dạng:
Dữ liệu chuỗi thời gian . Điều quan trọng là "thời gian". ví dụ: Dữ liệu về giá trong 5 năm cho một dữ liệu
Dữ liệu mặt cắt ngang (Cross Cut). Điều quan trọng là "cá nhân". eg.2023.11.01 Dữ liệu giá của tất cả các token trên thị trường tiền điện tử vào ngày đó
Dữ liệu bảng (Panel). Điều quan trọng là sự kết hợp của “thời gian cá nhân”. ví dụ: Dữ liệu giá của tất cả các mã thông báo trong bốn năm từ 2019.01.01 đến 2023.11.01.
Nguyên tắc: Khi chỉ mục (khóa) của dữ liệu được xác định, bạn có thể biết dữ liệu sẽ không có giá trị trùng lặp ở cấp độ nào.
Phương pháp kiểm tra:
pd.DataFrame.duplicated(subset=[key1, key2, ...])
Kiểm tra số lượng giá trị trùng lặp:
pd.DataFrame.duplicated(subset=[key1, key2, ...]).sum()
Lấy mẫu để xem các mẫu trùng lặp:
df[df.duplicated(subset=[...])].sample()
Sau khi tìm thấy mẫu, hãy sử dụngdf.loc
để chọn tất cả các mẫu trùng lặp tương ứng với chỉ mục
pd.merge(df1, df2, on=[key1, key2, ...], indicator=True, validate='1:1')
Trong chức năng hợp nhất theo chiều ngang, việc thêm
indicator
sẽ tạo ra trường_merge
. Sử dụngdfm['_merge'].value_counts()
để kiểm tra số lượng mẫu từ các nguồn khác nhau sau khi hợp nhất.Bằng cách thêm tham số
validate
, bạn có thể kiểm tra xem chỉ mục trong tập dữ liệu đã hợp nhất có như mong đợi hay không (1 to 1
,1 to many
hoặcmany to many
, trường hợp trong đó thực sự không yêu cầu xác minh). Nếu không như mong đợi, quá trình hợp nhất sẽ báo lỗi và dừng giữa chừng quá trình thực thi.
2. Giá trị ngoại lệ/giá trị thiếu/giá trị cực trị
Nguyên nhân phổ biến của các ngoại lệ:
trường hợp cực đoan . Ví dụ: nếu giá mã thông báo là 0,000001$ hoặc mã thông báo giá trị vốn hóa thị trường chỉ 500.000 đô la, nếu nó thay đổi một chút, sẽ có lợi nhuận gấp hàng chục lần.
Đặc điểm dữ liệu . Ví dụ: nếu dữ liệu giá mã thông báo bắt đầu được tải xuống vào ngày 1 tháng 1 năm 2020 thì đương nhiên không thể tính tỷ lệ lợi nhuận dữ liệu vào ngày 1 tháng 1 năm 2020 vì không có giá đóng cửa của ngày hôm trước.
lỗi dữ liệu . Các nhà cung cấp dữ liệu chắc chắn sẽ mắc sai lầm, chẳng hạn như ghi 12 nhân dân tệ mỗi mã thông báo thành 1,2 nhân dân tệ mỗi mã thông báo.
Nguyên tắc xử lý các giá trị ngoại lệ và giá trị bị thiếu:
xóa bỏ. Các ngoại lệ không thể sửa chữa hoặc sửa chữa một cách hợp lý có thể được xem xét xóa.
thay thế. Thường được sử dụng để xử lý các giá trị cực trị, chẳng hạn như winorizing hoặc lấy logarit (không được sử dụng phổ biến).
đổ đầy. Đối với các giá trị còn thiếu , bạn cũng có thể cân nhắc điền chúng một cách hợp lý. Các phương pháp phổ biến bao gồm giá trị trung bình (hoặc trung bình động), nội suy (Interpolation), điền 0
df.fillna(0)
, Forwarddf.fillna('ffill')
/ chuyển tiếp Sau khi điềndf.fillna('bfill')
, v.v., bạn phải xem xét liệu các giả định mà việc điền dựa vào có nhất quán hay không.Hãy thận trọng khi sử dụng tính năng điền ngược trong học máy vì có rủi ro sai lệch Nhìn về phía trước.
Phương pháp xử lý các giá trị cực trị:
1. Phương pháp phần trăm.
Bằng cách sắp xếp theo thứ tự từ nhỏ đến lớn, dữ liệu vượt quá tỷ lệ tối thiểu và tối đa sẽ được thay thế bằng dữ liệu quan trọng. Đối với dữ liệu có dữ liệu lịch sử phong phú, phương pháp này tương đối thô và không có tính ứng dụng cao, việc buộc xóa một tỷ lệ dữ liệu cố định có thể gây ra một tỷ lệ tổn thất nhất định.
2,3σ / ba phương pháp độ lệch chuẩn
Độ lệch chuẩn $$σfactor$$ phản ánh mức độ phân tán của phân phối dữ liệu yếu tố, tức là độ biến động. Phạm vi $$μ±3×σ$$ được sử dụng để xác định và thay thế các giá trị ngoại lệ trong tập dữ liệu, với khoảng 99,73% dữ liệu nằm trong phạm vi này. Tiền đề của phương pháp này là dữ liệu hệ số phải tuân theo phân phối chuẩn , tức là $$X∼N(μ,σ2)$$.
Trong đó, $$μ=∑ⁿᵢ₌₁·Xi / N$$, $$σ²=∑ⁿᵢ₌₁(xi-μ)² / n$$ và phạm vi giá trị hệ số hợp lý là $$ [ μ-3×σ ,μ+3×σ]$$.
Thực hiện các điều chỉnh sau cho tất cả các yếu tố trong phạm vi dữ liệu:
Nhược điểm của phương pháp này là dữ liệu thường được sử dụng trong lĩnh vực định lượng, chẳng hạn như giá cổ phiếu và giá token, thường biểu hiện các đỉnh nhọn và phân phối đuôi dày, không phù hợp với giả định về phân phối chuẩn. Phương pháp$3σ$$ sẽ khiến lượng lớn dữ liệu bị xác định nhầm là dữ liệu ngoại lệ.
3. Phương pháp số trung vị tuyệt đối trung vị (MAD)
Phương pháp này dựa trên độ lệch số trung vị và độ lệch tuyệt đối, làm cho dữ liệu được xử lý ít nhạy cảm hơn với các giá trị cực trị hoặc các giá trị ngoại lệ. Mạnh mẽ hơn phương pháp dựa trên giá trị trung bình và độ lệch chuẩn.
Số trung vị của các giá trị độ lệch tuyệt đối $$MAD = trung vị( ∑ⁿᵢ₌₁ (Xi - Xmedian))$$
Phạm vi giá trị hệ số hợp lý là $$[Xmedian - n×MAD, Xmedian + n×MAD]$$. Thực hiện các điều chỉnh sau cho tất cả các yếu tố trong phạm vi dữ liệu:
# 处理因子数据极端值情况class Extreme(object): def __init__(s, ini_data): s.ini_data = ini_data def three_sigma(s,n=3): mean = s.ini_data.mean() std = s.ini_data.std() low = mean - n*std high = mean + n*std return np.clip(s.ini_data,low,high) def mad(s, n=3): median = s.ini_data.median() mad_median = abs(s.ini_data - median).median() high = median + n * mad_median low = median - n * mad_median return np.clip(s.ini_data, low, high) def quantile(s,l = 0.025, h = 0.975): low = s.ini_data.quantile(l) high = s.ini_data.quantile(h) return np.clip(s.ini_data, low, high)
3. Tiêu chuẩn hóa
Chuẩn hóa điểm 1.Z
Tiền đề: $$X ~ N(μ,σ)$$
Do sử dụng độ lệch chuẩn nên phương pháp này nhạy hơn với các giá trị ngoại lệ trong dữ liệu.
$$$ x'ᵢ = (x-μ) / σ = (x - Mean(X)) / std(X) $$$
2. Tiêu chuẩn hóa chênh lệch giá trị tối đa và tối thiểu (Tỷ lệ tối thiểu)
Chuyển đổi từng dữ liệu yếu tố thành dữ liệu trong khoảng $$(0,1)$$ để cho phép so sánh dữ liệu có kích thước hoặc phạm vi khác nhau, nhưng nó không thay đổi sự phân bố trong dữ liệu cũng như không làm cho tổng trở thành 1.
Do xem xét các giá trị tối đa và tối thiểu, nó rất nhạy cảm với các giá trị ngoại lệ
Việc thống nhất các kích thước tạo điều kiện thuận lợi cho việc so sánh dữ liệu ở các kích thước khác nhau.
$$$ x'ᵢ = (xᵢ - min(x)) / max(x) - min(x) $$$
3. Thang sắp xếp
Chuyển đổi các đặc điểm dữ liệu thành thứ hạng của chúng và chuyển đổi các thứ hạng này thành điểm từ 0 đến 1, thường là phần trăm của chúng trong tập dữ liệu. *
Phương pháp này không nhạy cảm với các giá trị ngoại lệ vì thứ hạng không bị ảnh hưởng bởi các giá trị ngoại lệ.
Khoảng cách tuyệt đối giữa các điểm trong dữ liệu không được duy trì mà được chuyển thành thứ hạng tương đối.
$$$ NormRankᵢ = (Rankₓᵢ - min(Rankₓᵢ)) / max(Rankₓ) - min(Rankₓ) = Rankₓᵢ / N $$$
Trong đó, $$min(Rankₓ)=0$$, $$N$$ là tổng số điểm dữ liệu trong khoảng.
# 标准化因子数据class Scale(object): def __init__(s, ini_data,date): s.ini_data = ini_data s.date = date def zscore(s): mean = s.ini_data.mean() std = s.ini_data.std() return s.ini_data.sub(mean).div(std) def maxmin(s): min = s.ini_data.min() max = s.ini_data.max() return s.ini_data.sub(min).div(max - min) def normRank(s): # 对指定列进行排名,method='min'意味着相同值会有相同的排名,而不是平均排名ranks = s.ini_data.rank(method='min') return ranks.div(ranks.max())
4. Tần số dữ liệu
Đôi khi dữ liệu thu được không có tần suất cần thiết cho phân tích của chúng tôi. Ví dụ: nếu mức độ phân tích là hàng tháng và tần suất dữ liệu gốc là hàng ngày thì bạn cần sử dụng "downsampling", tức là dữ liệu tổng hợp là hàng tháng.
Lấy mẫu xuống
Nó đề cập đến việc tổng hợp dữ liệu trong một bộ sưu tập thành một hàng dữ liệu , chẳng hạn như tổng hợp dữ liệu hàng ngày thành dữ liệu hàng tháng. Lúc này cần xem xét đặc điểm của từng chỉ báo tổng hợp, các thao tác phổ biến bao gồm:
giá trị đầu tiên/giá trị cuối cùng
trung bình/ số trung vị
độ lệch chuẩn
lấy mẫu lại
Nó đề cập đến việc chia một hàng dữ liệu dữ liệu nhiều hàng dữ liệu, chẳng hạn như dữ liệu hàng năm được sử dụng để phân tích hàng tháng. Tình huống này thường yêu cầu sự lặp lại đơn giản và đôi khi cần tổng hợp dữ liệu hàng năm vào từng tháng theo tỷ lệ.
Giới thiệu về LUCIDA & FALCON
Lucida ( https://www.lucida.fund/ ) là một Quỹ phòng hộ định lượng hàng đầu trong ngành đã tham gia vào thị trường Tiền điện tử vào tháng 4 năm 2018. Quỹ này chủ yếu giao dịch CTA/arbitrage thống kê/arbitrage biến động tùy chọn và các chiến lược khác, với quy mô quản lý hiện tại trị giá 30 triệu ĐÔ LA. .
Falcon ( https://falcon.lucida.fund/ ) là cơ sở hạ tầng đầu tư Web3 thế hệ mới, dựa trên mô hình đa yếu tố và giúp người dùng "chọn", "mua", "quản lý" và "bán"crypto tài sản. Falcon được Lucida nuôi dưỡng vào tháng 6 năm 2022.
Nhiều nội dung hơn có thể được tìm thấy tại https://linktr.ee/lucida_and_falcon
Các bài viết trước
Xây dựng danh mục tài sản crypto mạnh mẽ bằng chiến lược đa yếu tố#Cơ bản lý thuyết#
Chính xác thì điều gì đang thúc đẩy thị trường bò của Crytpo? Đây có phải là một nâng cấp công nghệ?
Phát triển làm động lực: Hiểu tác động đến hiệu suất giá mã thông báo?
Liệu "đội ngũ đang làm gì đó" có thực sự liên quan đến giá tiền tệ?
5 triệu hàng dữ liệu đánh giá thị trường bò ba năm của tiền điện tử @LUCIDA
Tóm tắt 5 triệu hàng dữ liệu: Điều tra đợt tăng giá 3 năm của thị trường tiền điện tử @LUCIDA
LUCIDA: Sử dụng mô hình đa yếu tố để chọn đường đi và tiền tệ
LUCIDA × OKLink: Giá trị của dữ liệu trên chuỗi đối với đầu tư thị trường thứ cấp