import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as mtickerimport statsmodels.api as smimport statsmodels.formula.api as smffrom scipy import statsfrom itertools import productimport warningswarnings.filterwarnings("ignore")plt.rcParams.update({"figure.dpi": 150,"axes.spines.top": False,"axes.spines.right": False,"font.size": 11,})
Kế toán dồn tích là nền tảng của việc lập báo cáo tài chính hiện đại. Theo nguyên tắc dồn tích, doanh thu được ghi nhận khi đã thực hiện và chi phí được ghi nhận khi phát sinh, bất kể thời điểm tiền thực sự được thu hay chi. Độ lệch thời gian giữa các sự kiện kinh tế và việc thực hiện bằng tiền này tạo ra các khoản dồn tích (tức là phần phi tiền mặt của lợi nhuận được báo cáo). Về mặt hình thức, chúng ta định nghĩa tổng các khoản dồn tích như sau:
\[
\text{Accruals}_t = \text{Earnings}_t - \text{Cash Flow from Operations}_t
\tag{26.1}\]
Sự phân biệt giữa các khoản dồn tích và dòng tiền quan trọng vì hai thành phần này của lợi nhuận có các tính chất thống kê khác biệt rõ rệt. Dòng tiền từ hoạt động kinh doanh có xu hướng bền vững hơn và khó bị nhà quản lý thao túng hơn, trong khi các khoản dồn tích vốn mang tính nhất thời hơn và chịu sự điều chỉnh tùy ý của nhà quản lý thông qua các ước tính, giả định và lựa chọn thời điểm (Dechow, Ge, và Schrand 2010).
Sloan (1996) đã chứng minh hai quy luật thực nghiệm quan trọng trên dữ liệu Mỹ:
Thành phần dồn tích của lợi nhuận kém bền vững hơn thành phần dòng tiền trong việc dự báo lợi nhuận tương lai, và
Giá cổ phiếu vận động như thể nhà đầu tư không phân biệt được các thành phần này, coi các khoản dồn tích có cùng mức bền vững như dòng tiền. Phát hiện thứ hai này hàm ý một mô thức có thể dự báo được trong lợi nhuận cổ phiếu (tức là các doanh nghiệp có dồn tích cao thu được lợi nhuận thấp hơn ở kỳ sau, và ngược lại, được gọi là hiện tượng bất thường về dồn tích).
26.0.1 Vì sao là Việt Nam?
Thị trường chứng khoán Việt Nam là một phòng thí nghiệm hấp dẫn để nghiên cứu động thái của các khoản dồn tích, vì một số lý do sau:
Chuẩn mực kế toán đang chuyển đổi. Việt Nam áp dụng Chuẩn mực Kế toán Việt Nam (VAS), phần lớn dựa trên các Chuẩn mực Kế toán Quốc tế cũ hơn nhưng chưa hội tụ hoàn toàn với IFRS. VAS vẫn giữ một số quy định mang tính quy tắc cứng, có thể tạo ra các mô thức dồn tích khác với các khung dựa trên nguyên tắc ở các thị trường phát triển.
Ảnh hưởng của doanh nghiệp nhà nước (DNNN). Một tỷ lệ đáng kể các doanh nghiệp niêm yết trên HOSE và HNX là các DNNN cũ hoặc vẫn còn sở hữu nhà nước một phần. Các doanh nghiệp này có thể đối mặt với những động cơ khác trong việc quản lý các khoản dồn tích (mang tính chính trị thay vì thuần túy kinh tế), tạo ra tính không đồng nhất vốn không có trong các nghiên cứu gốc trên thị trường Mỹ.
Mức độ trưởng thành của thị trường và sự thành thạo của nhà đầu tư. Thị trường chứng khoán Việt Nam, với HOSE thành lập năm 2000 và HNX năm 2005, vẫn đang phát triển. Nhà đầu tư cá nhân chi phối khối lượng giao dịch, và hạ tầng thể chế (mức bao phủ của nhà phân tích, hạn chế bán khống, các trung gian thông tin) kém phát triển hơn so với Mỹ. Môi trường này có thể khuếch đại hoặc làm suy yếu các mô thức định giá sai được ghi nhận ở các thị trường phát triển.
Biên độ giá hằng ngày. Cả HOSE (\(\pm\) 7%) và HNX (\(\pm\) 10%) đều áp dụng biên độ giá hằng ngày, có thể cản trở khám phá giá và tạo ra sự phụ thuộc đường đi trong việc đo lường lợi nhuận mà bối cảnh Mỹ không có.
Động thái tăng trưởng của thị trường mới nổi. Các nền kinh tế tăng trưởng cao tạo ra các hồ sơ dồn tích khác biệt: tăng trưởng doanh thu nhanh về mặt cơ học tạo ra các khoản dồn tích vốn lưu động lớn ngay cả khi không có bất kỳ sự thao túng nào của nhà quản lý (Fairfield, Whisenant, và Yohn 2003).
26.1 Đo lường các khoản dồn tích
26.1.1 Cách tiếp cận bảng cân đối kế toán
Cách tiếp cận truyền thống để đo lường các khoản dồn tích, được dùng trong phần lớn các nghiên cứu ban đầu, xây dựng tổng các khoản dồn tích từ các ảnh chụp bảng cân đối kế toán liên tiếp. Định nghĩa các khoản mục bảng cân đối sau cho doanh nghiệp \(i\) trong kỳ \(t\) (Bảng 26.1).
Bảng 26.1: Các khoản mục chính của bảng cân đối kế toán dùng để đo lường các khoản dồn tích
Symbol
Description
VAS Equivalent
\(\Delta CA_{i,t}\)
Change in current assets
Thay đổi tài sản ngắn hạn
\(\Delta Cash_{i,t}\)
Change in cash and equivalents
Thay đổi tiền và tương đương tiền
\(\Delta CL_{i,t}\)
Change in current liabilities
Thay đổi nợ ngắn hạn
\(\Delta STD_{i,t}\)
Change in short-term debt
Thay đổi vay ngắn hạn
\(\Delta TP_{i,t}\)
Change in taxes payable
Thay đổi thuế phải nộp
\(Dep_{i,t}\)
Depreciation and amortization
Khấu hao TSCĐ
Tổng các khoản dồn tích theo cách tiếp cận bảng cân đối kế toán là:
Trực giác đằng sau Phương trình 26.2 khá đơn giản. Thay đổi của tài sản ngắn hạn phi tiền mặt (như các khoản phải thu và hàng tồn kho) thể hiện doanh thu được ghi nhận hoặc chi phí được hoãn lại mà không có dòng tiền tương ứng. Thay đổi của nợ ngắn hạn hoạt động (không bao gồm nợ vay) phản ánh các chi phí được ghi nhận mà không có dòng tiền chi ra. Nợ vay ngắn hạn và thuế phải nộp bị loại ra vì chúng liên quan đến tài trợ và thời điểm nộp thuế chứ không phải các khoản dồn tích hoạt động. Khấu hao được trừ đi như một khoản chi phí phi tiền mặt trong lợi nhuận.
Tất cả các biến thường được chia cho tổng tài sản bình quân để kiểm soát quy mô doanh nghiệp:
Hribar và Collins (2002) đã chứng minh rằng cách tiếp cận bảng cân đối kế toán gây ra sai số đo lường vì các sự kiện phi hoạt động, như sáp nhập, mua lại, thoái vốn và chuyển đổi ngoại tệ, ảnh hưởng đến số dư tài sản và nợ ngắn hạn mà không có tác động tương ứng lên lợi nhuận. Họ ủng hộ một cách tiếp cận đơn giản và chính xác hơn:
trong đó \(\text{CFO}_{i,t}\) là dòng tiền từ hoạt động kinh doanh được báo cáo trực tiếp trên báo cáo lưu chuyển tiền tệ.
26.1.3 Bối cảnh Việt Nam
Với các doanh nghiệp niêm yết Việt Nam, cách tiếp cận báo cáo lưu chuyển tiền tệ nhìn chung được ưu tiên hơn, nhưng người thực hành nên lưu ý một số vấn đề về dữ liệu:
Thông tư 200/2014/TT-BTC chuẩn hóa hệ thống tài khoản và các mẫu báo cáo tài chính. Dòng tiền từ hoạt động kinh doanh được hầu hết doanh nghiệp báo cáo theo phương pháp gián tiếp (bắt đầu từ lợi nhuận ròng và điều chỉnh các khoản phi tiền mặt), dù một số doanh nghiệp dùng phương pháp trực tiếp.
VAS 24 (Báo cáo lưu chuyển tiền tệ) điều chỉnh việc trình bày thông tin. Khác với IFRS, cách xử lý lãi vay đã trả và cổ tức nhận được trong phần hoạt động kinh doanh theo VAS kém linh hoạt hơn, có thể ảnh hưởng đến tính so sánh được.
Trong phần còn lại của chương này, chúng ta dùng cách tiếp cận bảng cân đối kế toán khi minh họa trên dữ liệu mô phỏng (để minh bạch về mặt sư phạm) và cách tiếp cận báo cáo lưu chuyển tiền tệ trên dữ liệu doanh nghiệp thực tế khi có sẵn.
26.2 Phân tích mô phỏng
Trước khi chuyển sang dữ liệu thị trường Việt Nam, chúng ta xây dựng một mô phỏng để hình thành trực giác kinh tế về việc vì sao tính bền vững của các khoản dồn tích khác với tính bền vững của dòng tiền, và sai số ước tính trong kế toán dồn tích đóng vai trò gì trong việc tạo ra sự khác biệt này.
26.2.1 Mô hình
Xét một doanh nghiệp được đơn giản hóa như sau:
Bán hàng chịu với biên lợi nhuận gộp không đổi \(\mu\)
Tuân theo quá trình doanh thu AR(1): \(S_t = \bar{S} + \rho(S_{t-1} - \bar{S}) + \varepsilon_t\), trong đó \(\varepsilon_t \sim N(0, \sigma^2_S)\)
Thu hồi các khoản phải thu ở kỳ kế tiếp, với tỷ lệ vỡ nợ thực \(\delta\)
Ghi nhận dự phòng nợ phải thu khó đòi bằng một tỷ lệ \(\alpha\) của doanh thu hiện tại
Trả cổ tức bằng 100% lợi nhuận ròng
Tham số trọng tâm là \(\alpha\), ước tính của nhà quản lý về nợ xấu. Khi \(\alpha = \delta\) (tỷ lệ vỡ nợ thực), hệ thống kế toán không chệch. Khi \(\alpha \neq \delta\), các khoản dồn tích chứa sai số ước tính ảnh hưởng đến tính bền vững.
Trước hết, chúng ta tạo 1.000 năm dữ liệu cho một doanh nghiệp đơn lẻ với \(\alpha = \delta = 0.03\) (kế toán không chệch) để trực quan hóa quá trình doanh thu.
Hình 26.1: Doanh thu mô phỏng của một doanh nghiệp đơn lẻ trong 20 năm. Đường đứt nét màu xanh thể hiện doanh thu trung bình. Cấu trúc AR(1) tạo ra các dao động mượt và bền vững.
26.2.3 Mô phỏng chéo: tính bền vững và sai số ước tính
Hiểu biết kinh tế trung tâm là khi ước tính \(\alpha\) của nhà quản lý lệch khỏi tỷ lệ thực \(\delta\), các khoản dồn tích chứa một sai số ước tính mang tính hệ thống làm giảm tính bền vững của lợi nhuận. Để minh họa, chúng ta mô phỏng 5.000 doanh nghiệp, mỗi doanh nghiệp có \(\alpha \in [0.01, 0.05]\) được rút ngẫu nhiên trong khi giữ tỷ lệ vỡ nợ thực cố định ở \(\delta = 0.03\).
Với mỗi doanh nghiệp, chúng ta ước lượng tính bền vững của lợi nhuận bằng hệ số góc \(\hat{\beta}_1\) từ hồi quy AR(1) của lợi nhuận ròng:
Hình 26.2: Tính bền vững của lợi nhuận so với tham số dự phòng (\(\alpha\)). Tính bền vững đạt đỉnh gần \(\alpha = 0.03\), tỷ lệ vỡ nợ thực, và giảm đối xứng khi ước tính kế toán lệch khỏi thực tế kinh tế theo cả hai hướng.
26.2.4 Phân rã tính bền vững theo thành phần lợi nhuận
Mô phỏng cho phép chúng ta kiểm chứng dự báo lý thuyết cốt lõi: tính bền vững của dòng tiền vượt tính bền vững của các khoản dồn tích. Chúng ta tính dòng tiền hoạt động và các khoản dồn tích cho từng doanh nghiệp mô phỏng và ước lượng tính bền vững riêng cho từng thành phần.
Component persistence in simulated data
def component_persistence(df: pd.DataFrame) ->dict:"""Estimate persistence of NI, CFO, and accruals.""" temp = df.copy()# CFO = collections - COGS (direct method, simplified) temp["cfo"] = temp["collections"] - temp["cogs"] temp["acc"] = temp["net_income"] - temp["cfo"] out = {"alpha": temp["alpha"].iloc[0]}for var in ["net_income", "cfo", "acc"]: t = temp[["year", var]].copy() t["lag"] = t[var].shift(1) t = t.dropna()iflen(t) <10: out[f"persist_{var}"] = np.nancontinue X = sm.add_constant(t["lag"]) model = sm.OLS(t[var], X).fit() out[f"persist_{var}"] = model.params["lag"]return out# Run for a subset at alpha = 0.03 (unbiased) and alpha = 0.05 (biased)component_results = []for a_val in [0.01, 0.02, 0.03, 0.04, 0.05]:for seed_offset inrange(500): frng = np.random.default_rng(10000+ seed_offset) fdf = simulate_firm(alpha=a_val, n_years=200, rng=frng) component_results.append(component_persistence(fdf))comp_df = pd.DataFrame(component_results)
Bảng 26.2: Tính bền vững trung bình của các thành phần lợi nhuận theo tham số dự phòng. Tính bền vững của dòng tiền ổn định qua các giá trị \(\alpha\), trong khi tính bền vững của các khoản dồn tích và của lợi nhuận tổng thể đạt đỉnh khi ước tính kế toán khớp với tỷ lệ vỡ nợ thực (\(\delta = 0.03\)).
Earnings
Cash Flows
Accruals
α
0.01
0.8728
0.6922
-0.0357
0.02
0.8758
0.6922
-0.0357
0.03
0.8788
0.6922
-0.0357
0.04
0.8818
0.6922
-0.0357
0.05
0.8846
0.6922
-0.0357
Mô phỏng xác nhận một hiểu biết then chốt: tính bền vững của dòng tiền gần như không thay đổi theo chất lượng ước tính các khoản dồn tích, trong khi tính bền vững của các khoản dồn tích, và do đó của tổng lợi nhuận, suy giảm khi ước tính của nhà quản lý lệch khỏi thực tế kinh tế. Điều này cung cấp lời giải thích cấu trúc cho quy luật thực nghiệm được ghi nhận trong Sloan (1996): các khoản dồn tích kém bền vững hơn vì chúng chứa sai số ước tính vốn hồi quy về trung bình khi hệ thống kế toán tự hiệu chỉnh theo thời gian.
Diễn giải cho Việt Nam
Trong bối cảnh Việt Nam, cơ chế này được khuếch đại bởi một số yếu tố thể chế. Các quy định của VAS về dự phòng nợ phải thu khó đòi (Thông tư 228/2009/TT-BTC, được cập nhật bởi Thông tư 48/2019/TT-BTC) quy định các tỷ lệ cụ thể theo thời gian quá hạn thay vì cho phép nhà quản lý toàn quyền quyết định. Dù cách tiếp cận dựa trên quy tắc này làm giảm một số hình thức thao túng, nó có thể làm tăng sai số ước tính khi các tỷ lệ quy định lệch khỏi kinh nghiệm vỡ nợ riêng của doanh nghiệp, đặc biệt liên quan đến các doanh nghiệp trong những ngành thay đổi nhanh như phát triển bất động sản hoặc sản xuất xuất khẩu.
26.3 Tính bền vững của lợi nhuận trong dữ liệu Việt Nam
Bây giờ chúng ta chuyển sang phân tích thực nghiệm dùng dữ liệu các doanh nghiệp niêm yết Việt Nam. Các yêu cầu về dữ liệu là:
Báo cáo tài chính năm của các doanh nghiệp niêm yết trên HOSE và HNX
Dữ liệu lợi nhuận cổ phiếu: Giá đóng cửa điều chỉnh hằng tháng để tính lợi nhuận
Phân loại ngành: mã VSIC (Hệ thống ngành kinh tế Việt Nam)
26.3.1 Chuẩn bị dữ liệu
Đoạn mã sau xây dựng các thước đo dồn tích từ báo cáo tài chính của doanh nghiệp Việt Nam. Chúng ta minh họa quy trình với giả định dữ liệu được nạp từ cơ sở dữ liệu cục bộ hoặc các tệp CSV. Hãy điều chỉnh bước nạp dữ liệu cho phù hợp với nguồn của bạn.
Construct accrual variables from Vietnamese financial statement data
# ─── Data Loading (adapt to your source) ───────────────────────────# funda = pd.read_parquet("data/vn_annual_financials.parquet")# prices = pd.read_parquet("data/vn_monthly_prices.parquet")# ─── Variable Construction ──────────────────────────────────────────def construct_accruals(funda: pd.DataFrame) -> pd.DataFrame:""" Construct accrual measures from Vietnamese annual financial data. Expected columns (VAS-aligned): ticker, year, datadate, act (current assets), lct (current liabilities), che (cash & equivalents), dlc (short-term borrowings), txp (taxes payable), dp (depreciation & amortization), oiadp (operating income after depreciation), at (total assets), cfo (cash flow from operations), exchange (HOSE=1, HNX=2), vsic2 (2-digit industry code) """ df = funda.sort_values(["ticker", "year"]).copy()# Fill missing with zero where economically appropriatefor col in ["che", "dlc", "txp"]: df[col] = df[col].fillna(0)# Lagged total assets and average total assets df["lag_at"] = df.groupby("ticker")["at"].shift(1) df["avg_at"] = (df["at"] + df["lag_at"]) /2# Balance sheet approach to accrualsfor col in ["act", "che", "lct", "dlc", "txp"]: df[f"d_{col}"] = df.groupby("ticker")[col].diff() df["acc_bs"] = ( (df["d_act"] - df["d_che"])- (df["d_lct"] - df["d_dlc"] - df["d_txp"])- df["dp"] )# Scaled variables df["earn"] = df["oiadp"] / df["avg_at"] df["acc"] = df["acc_bs"] / df["avg_at"] df["cfo"] = df["earn"] - df["acc"]# If CFO from cash flow statement is available, prefer itif"cfo_stmt"in df.columns: df["cfo_direct"] = df["cfo_stmt"] / df["avg_at"] df["acc_cf"] = df["earn"] - df["cfo_direct"]# Lead earnings (next year) df["lead_earn"] = df.groupby("ticker")["earn"].shift(-1)# Decile ranks (within each year for cross-sectional analysis)for var in ["acc", "earn", "cfo"]: df[f"{var}_decile"] = ( df.groupby("year")[var] .transform(lambda x: pd.qcut(x, 10, labels=False, duplicates="drop") +1) ) df["lead_earn_decile"] = ( df.groupby("year")["lead_earn"] .transform(lambda x: pd.qcut(x, 10, labels=False, duplicates="drop") +1) )# Filter df = df.query("avg_at > 0").dropna(subset=["acc", "earn", "cfo", "lead_earn"])return df
26.3.2 Dữ liệu mô phỏng kiểu Việt Nam để minh họa
Vì không thể phân phối dữ liệu độc quyền trong chương này, chúng ta tạo dữ liệu tổng hợp mô phỏng các tính chất chéo của các doanh nghiệp niêm yết Việt Nam. Các tham số được hiệu chỉnh để xấp xỉ các giá trị quan sát được trên thị trường Việt Nam.
Bảng 26.3 báo cáo giá trị trung bình của lợi nhuận, các khoản dồn tích và dòng tiền theo thập phân vị dồn tích. Mô thức này phải phản ánh phép phân rã cơ học: \(\text{earn} = \text{acc} + \text{cfo}\).
Bảng 26.3: Lợi nhuận, các khoản dồn tích và dòng tiền trung bình theo thập phân vị dồn tích. Các doanh nghiệp ở thập phân vị dồn tích thấp nhất có dòng tiền cao nhất, trong khi các doanh nghiệp dồn tích cao có dòng tiền bị nén hoặc âm, một mô thức phù hợp với đồng nhất thức kế toán.
Accruals
Earnings
Cash Flows
Accrual Decile
1
-0.0898
0.0760
0.1657
2
-0.0509
0.0814
0.1324
3
-0.0321
0.0769
0.1090
4
-0.0180
0.0800
0.0980
5
-0.0057
0.0792
0.0849
6
0.0071
0.0776
0.0705
7
0.0193
0.0814
0.0621
8
0.0334
0.0760
0.0425
9
0.0521
0.0760
0.0239
10
0.0896
0.0780
-0.0116
26.3.4 Hồi quy tính bền vững
Chúng ta ước lượng hồi quy tính bền vững gộp tương tự Bảng 2 của Sloan (1996). Đặc tả cơ sở là:
Bảng 26.4: Hồi quy tính bền vững của lợi nhuận. Cột (1) ước lượng tính bền vững tổng hợp. Cột (2) phân rã lợi nhuận thành thành phần dồn tích và thành phần dòng tiền. Hệ số của các khoản dồn tích thấp hơn một cách có ý nghĩa thống kê so với của dòng tiền, xác nhận tính bền vững khác biệt.
(1) Aggregate
(2) Components
Intercept
0.0189 (0.0008)
0.0189 (0.0008)
Earnings
0.7618 (0.0079)
Accruals
0.7602 (0.0127)
Cash Flows
0.7618 (0.0079)
N
7,000
7,000
R²
0.569
0.569
F-test (acc=cfo)
F = 0.02, p = 0.8746
26.3.5 Tính bền vững ở cấp độ ngành
Các hồi quy toàn thị trường có thể che giấu tính không đồng nhất giữa các ngành. Cơ cấu ngành của Việt Nam tập trung vào sản xuất, bất động sản, ngân hàng và bán lẻ (tức là các lĩnh vực có hồ sơ dồn tích rất khác nhau). Chúng ta ước lượng tính bền vững riêng theo mã VSIC hai chữ số.
Bảng 26.5: Phân phối các hệ số bền vững ở cấp độ ngành. Mỗi hàng báo cáo các thống kê về phân phối của các hệ số ước lượng trên các ngành VSIC 2 chữ số.
Intercept
Accruals (γ_a)
Cash Flows (γ_c)
Mean
0.0192
0.7573
0.7587
Q1
0.0171
0.7310
0.7323
Median
0.0193
0.7621
0.7558
Q3
0.0213
0.7914
0.7750
26.3.6 Trực quan hóa tính bền vững
Hình 26.3 so sánh hệ số bền vững của các khoản dồn tích và của dòng tiền giữa các ngành, cung cấp một phép kiểm tra trực quan cho giả thuyết tính bền vững khác biệt.
Hình 26.3: Hệ số bền vững của các khoản dồn tích so với dòng tiền theo ngành VSIC. Ở hầu hết mọi ngành, tính bền vững của dòng tiền vượt tính bền vững của các khoản dồn tích, phù hợp với giả thuyết tính bền vững khác biệt.
26.4 Định giá thị trường đối với các thành phần lợi nhuận
Phân tích tính bền vững cho thấy các khoản dồn tích kém bền vững hơn dòng tiền. Câu hỏi về hiệu quả thị trường là liệu giá cổ phiếu có phản ánh sự khác biệt này hay không. Nếu nhà đầu tư ngây thơ coi cả hai thành phần là bền vững như nhau, điều mà Sloan (1996) gọi là “sự neo chặt vào lợi nhuận” (earnings fixation), thì một phần có thể dự báo của lợi nhuận tương lai phải liên quan đến cơ cấu dồn tích của lợi nhuận hiện tại.
với \(\hat{\gamma}_a < \hat{\gamma}_c\). Nếu thị trường dùng Phương trình 26.8 thay vì Phương trình 26.9, thì các doanh nghiệp dồn tích cao bị định giá quá cao (vì thị trường đánh giá quá cao tính bền vững của phần lợi nhuận nặng về dồn tích) và các doanh nghiệp dồn tích thấp bị định giá quá thấp.
26.4.2 Kiểm định Abel–Mishkin
Việc kiểm định xem các hệ số định giá của thị trường có khớp với các hệ số dự báo hợp lý hay không có thể thực hiện theo cách tiếp cận của Abel (1983), tránh được sự phức tạp của hệ phi tuyến đầy đủ của Abel và Mishkin (1983), Mishkin (1983) và Mishkin (2007). Trực giác rất đơn giản: nếu các thành phần lợi nhuận trễ bị định giá sai, điều này phải phát hiện được trong hồi quy của lợi nhuận bất thường tương lai theo các thành phần đó:
Dưới định giá hiệu quả, \(\beta_a = \beta_c = 0\): thông tin công khai trễ không có sức dự báo đối với lợi nhuận bất thường. Phát hiện \(\beta_a < 0\) hàm ý thị trường định giá quá cao các khoản dồn tích và sau đó điều chỉnh.
Bảng 26.6: Hồi quy lợi nhuận bất thường. Cột (1) hồi quy lợi nhuận điều chỉnh theo quy mô theo các khoản dồn tích và dòng tiền trễ. Cột (2) dùng xếp hạng thập phân vị. Hệ số âm của các khoản dồn tích cho thấy thị trường định giá quá cao thành phần dồn tích và điều chỉnh ở kỳ tiếp theo.
(1) Continuous
(2) Decile Ranks
Intercept
0.0263 (0.0058)
0.0962 (0.0161)
Accruals
-0.5686 (0.0920)
-0.0091 (0.0016)
Cash Flows
-0.3538 (0.0575)
-0.0087 (0.0016)
N
7,000
7,000
R²
0.0067
0.0055
26.4.3 Diễn giải cho Việt Nam
Giả thuyết chú ý hạn chế của Hirshleifer và Teoh (2003) cung cấp một lời giải thích đặc biệt hấp dẫn cho thị trường Việt Nam. Khi nhà đầu tư cá nhân chi phối giao dịch, như ở Việt Nam, nơi sự tham gia của nhà đầu tư cá nhân vượt 80% giá trị giao dịch hằng ngày, năng lực xử lý thông tin bị hạn chế. Nhà đầu tư có thể neo vào con số lợi nhuận công bố mà không phân rã thành thành phần dồn tích và dòng tiền. Việc thiếu cơ chế bán khống (Việt Nam chưa đưa ra bán khống có bảo đảm cho đến năm 2024) càng cản trở việc hiệu chỉnh định giá quá cao, có thể khiến hiện tượng bất thường về dồn tích kéo dài hơn so với các thị trường phát triển.
26.5 Hiện tượng bất thường về dồn tích
26.5.1 Lợi nhuận danh mục theo thập phân vị dồn tích
Theo cách tiếp cận danh mục của Sloan (1996), chúng ta tính lợi nhuận trung bình điều chỉnh theo quy mô cho từng thập phân vị dồn tích. Nếu thị trường định giá sai các khoản dồn tích, chúng ta kỳ vọng một mô thức giảm đơn điệu: các doanh nghiệp dồn tích thấp (thập phân vị 1) thu được lợi nhuận bất thường dương, trong khi các doanh nghiệp dồn tích cao (thập phân vị 10) thu được lợi nhuận bất thường âm.
Bảng 26.7: Lợi nhuận trung bình điều chỉnh theo quy mô theo thập phân vị dồn tích. Lợi nhuận của danh mục mua–bán khống (mua thập phân vị 1, bán khống thập phân vị 10) và thống kê t của nó được báo cáo ở cuối bảng.
Mean Return
Std Dev
N Years
t-stat
acc_decile
1
0.0242
0.0471
14
1.92
2
0.0135
0.0370
14
1.37
3
-0.0008
0.0596
14
-0.05
4
-0.0111
0.0317
14
-1.31
5
0.0034
0.0337
14
0.38
6
0.0086
0.0422
14
0.76
7
-0.0097
0.0318
14
-1.14
8
0.0005
0.0580
14
0.03
9
-0.0280
0.0337
14
-3.11
10
-0.0155
0.0354
14
-1.64
26.5.2 Trực quan hóa hiện tượng bất thường
Hiện mã
decile_plot = port_rets.groupby("acc_decile")["size_adj_ret"].mean()fig, ax = plt.subplots()colors = ["steelblue"if r >0else"firebrick"for r in decile_plot.values]ax.bar(decile_plot.index, decile_plot.values, color=colors, edgecolor="white")ax.axhline(0, color="black", linewidth=0.5)ax.set_xlabel("Accrual Decile")ax.set_ylabel("Mean Size-Adjusted Return")ax.set_xticks(range(1, 11))ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1, decimals=1))plt.tight_layout()plt.show()
Hình 26.4: Lợi nhuận trung bình điều chỉnh theo quy mô theo thập phân vị dồn tích. Độ dốc đi xuống từ các thập phân vị dồn tích thấp đến cao phù hợp với việc thị trường định giá quá cao thành phần dồn tích của lợi nhuận.
26.5.3 Tính ổn định theo chuỗi thời gian
Một câu hỏi quan trọng đối với mọi hiện tượng bất thường là nó có tồn tại theo thời gian hay chỉ tập trung ở một số giai đoạn con. Hình 26.5 vẽ lợi nhuận danh mục mua–bán khống theo năm.
Hiện mã
fig, ax = plt.subplots()ax.bar(hedge_series.index, hedge_series.values, color=["steelblue"if v >0else"firebrick"for v in hedge_series.values], edgecolor="white")ax.axhline(hedge_series.mean(), color="black", linestyle="--", linewidth=1, label=f"Mean = {hedge_series.mean():.1%}")ax.axhline(0, color="black", linewidth=0.5)ax.set_xlabel("Year")ax.set_ylabel("Hedge Portfolio Return")ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1, decimals=0))ax.legend()plt.tight_layout()plt.show()
Hình 26.5: Lợi nhuận danh mục mua–bán khống hằng năm (thập phân vị 1 trừ thập phân vị 10) theo thời gian. Giá trị dương cho thấy các doanh nghiệp dồn tích thấp vượt trội hơn các doanh nghiệp dồn tích cao. Biến thiên giữa các năm là đáng kể, phản ánh bản chất nhiễu của việc đo lợi nhuận theo năm.
26.6 Thảo luận và các góc nhìn đương đại
26.6.1 Các giải thích thay thế
Hiện tượng bất thường về dồn tích đã tạo ra một cuộc tranh luận sôi nổi trong tài liệu kế toán và tài chính. Một số giải thích thay thế đáng xem xét trong bối cảnh Việt Nam:
Giải thích dựa trên rủi ro.Khan (2008) lập luận rằng các doanh nghiệp dồn tích cao có thể thu được lợi nhuận thấp hơn vì chúng ít rủi ro hơn, chứ không phải vì bị định giá sai. Nếu CAPM hoặc các mô hình đa nhân tố không nắm bắt được cấu trúc rủi ro thực, điều có vẻ là hiện tượng bất thường có thể chỉ là phần bù cho các nhân tố rủi ro bị bỏ sót. Giải thích này khó đánh giá hơn ở Việt Nam do lịch sử hạn chế của các mô hình nhân tố được hiệu chỉnh theo dữ liệu trong nước.
Tăng trưởng và đầu tư.Fairfield, Whisenant, và Yohn (2003) chỉ ra rằng tính bền vững thấp của các khoản dồn tích mở rộng sang các khoản dồn tích dài hạn (chi tiêu vốn), gợi ý rằng hiện tượng này phản ánh lợi suất biên giảm dần của đầu tư chứ không phải thao túng lợi nhuận. Trong môi trường tăng trưởng cao của Việt Nam, kênh này có thể đặc biệt quan trọng vì các doanh nghiệp đầu tư mạnh tay trong các giai đoạn bùng nổ tín dụng.
Sai lệch do dữ liệu.Kraft, Leone, và Wasley (2006) nhận diện độ nhạy với giá trị ngoại lai và thiên lệch nhìn trước trong bằng chứng gốc. Dữ liệu tài chính Việt Nam, với lịch sử ngắn hơn và tần suất sai sót báo cáo cao hơn, đòi hỏi sự cảnh giác bổ sung ở những điểm này.
Ràng buộc thể chế. Các hạn chế bán khống, phổ biến ở Việt Nam cho đến gần đây, ngăn các nhà kinh doanh chênh lệch giá hiệu chỉnh việc định giá quá cao. Kết hợp với chi phí giao dịch cao và sự tham gia hạn chế của nhà đầu tư tổ chức, điều này tạo ra một môi trường trong đó định giá sai có thể kéo dài ngay cả khi các nhà đầu tư thành thạo nhận ra nó.
26.6.2 Doanh nghiệp nhà nước và chất lượng các khoản dồn tích
Một đặc điểm riêng của thị trường Việt Nam là sự phổ biến của các DNNN và DNNN cũ. Một số giả thuyết có thể kiểm định nảy sinh:
Làm mượt vì mục tiêu chính trị: Nhà quản lý DNNN có thể làm mượt lợi nhuận để đạt các mục tiêu của chính phủ, tạo ra các khoản dồn tích khác về bản chất so với của các doanh nghiệp tư nhân.
Chất lượng kiểm toán:Khanh và Nguyen (2018) thấy rằng chất lượng kiểm toán thay đổi một cách hệ thống theo cơ cấu sở hữu ở Việt Nam. Chất lượng kiểm toán thấp hơn có thể cho phép thao túng các khoản dồn tích nhiều hơn.
Môi trường thông tin: Các DNNN có thể công bố thông tin tự nguyện yếu hơn, làm tăng bất cân xứng thông tin giữa các khoản dồn tích và dòng tiền.
Các giả thuyết này gợi ý rằng hiện tượng bất thường về dồn tích có thể biến thiên chéo giữa các doanh nghiệp theo các khía cạnh sở hữu riêng có của Việt Nam.
26.6.3 Các lưu ý về phương pháp luận
Khi triển khai phân tích này với dữ liệu Việt Nam thực tế, một số vấn đề thực hành cần được chú ý:
Sai số chuẩn. Sai số chuẩn OLS gộp giả định độc lập giữa các quan sát doanh nghiệp–năm. Trên thực tế, tồn tại cả tương quan chéo (các cú sốc chung trong cùng một năm) lẫn tương quan chuỗi thời gian (tính bền vững ở cấp doanh nghiệp). Nên gom cụm sai số chuẩn theo doanh nghiệp và năm (gom cụm hai chiều) hoặc dùng quy trình Fama-MacBeth (Fama và MacBeth 1973) với hiệu chỉnh Newey-West.
VAS-specific items. Vietnamese financial statements include items without direct equivalents in Compustat, such as chi phí trả trước (prepaid expenses reported separately from current assets in some VAS templates). Researchers must map these carefully.
Biên độ giá. Biên độ giá hằng ngày trên HOSE (\(\pm\) 7%) và HNX (\(\pm\) 10%) có thể cắt cụt phân phối lợi nhuận và tạo ra tương quan chuỗi trong lợi nhuận đo được. Với việc đo lợi nhuận trên cửa sổ 12 tháng, điều này ít gây vấn đề hơn nhưng vẫn nên được ghi lại.
Hiệu ứng sàn giao dịch. Các doanh nghiệp niêm yết trên HOSE có xu hướng lớn hơn và thanh khoản hơn các doanh nghiệp niêm yết trên HNX. Phân tích riêng theo sàn, hoặc đưa vào hiệu ứng cố định theo sàn, có thể giúp bảo đảm kết quả không bị chi phối bởi khác biệt về thanh khoản.
26.7 Tóm tắt
Chương này xem xét kế toán dồn tích và các hàm ý của nó đối với tính bền vững của lợi nhuận và hiệu quả thị trường trong bối cảnh Việt Nam. Các phát hiện chính là:
Các khoản dồn tích là phần lợi nhuận không được hỗ trợ bởi dòng tiền đồng thời. Chúng phát sinh tự nhiên từ kế toán dồn tích nhưng cũng chứa các sai số ước tính và sự tùy ý của nhà quản lý.
Phân tích mô phỏng chứng minh rằng khi các ước tính kế toán lệch khỏi thực tế kinh tế, tính bền vững của các khoản dồn tích giảm xuống dưới tính bền vững của dòng tiền, cung cấp lời giải thích cấu trúc cho quy luật thực nghiệm.
Các hồi quy tính bền vững xác nhận rằng thành phần dồn tích của lợi nhuận kém bền vững hơn thành phần dòng tiền, một phát hiện đúng qua các ngành.
Các kiểm định định giá thị trường gợi ý rằng giá cổ phiếu trên thị trường Việt Nam có thể chưa phản ánh đầy đủ tính bền vững khác biệt của các thành phần lợi nhuận, làm nảy sinh hiện tượng bất thường về dồn tích.
Môi trường thể chế Việt Nam cung cấp sự biến thiên phong phú cho nghiên cứu tương lai về mối tương tác giữa chất lượng kế toán, mức độ thành thạo của nhà đầu tư và hiệu quả thị trường.
Abel, Andrew B. 1983. “Optimal investment under uncertainty”. The American Economic Review 73 (1): 228–33.
Abel, Andrew B, và Frederic S Mishkin. 1983. “An integrated view of tests of rationality, market efficiency and the short-run neutrality of monetary policy”. Journal of Monetary Economics 11 (1): 3–24.
Dechow, Patricia, Weili Ge, và Catherine Schrand. 2010. “Understanding earnings quality: A review of the proxies, their determinants and their consequences”. Journal of accounting and economics 50 (2-3): 344–401. https://doi.org/10.1016/j.jacceco.2010.09.001.
Fairfield, Patricia M, J Scott Whisenant, và Teri Lombardi Yohn. 2003. “Accrued earnings and growth: Implications for future profitability and market mispricing”. The accounting review 78 (1): 353–71.
Fama, Eugene F, và James D MacBeth. 1973. “Risk, return, and equilibrium: Empirical tests”. Journal of political economy 81 (3): 607–36.
Hirshleifer, David, và Siew Hong Teoh. 2003. “Limited attention, information disclosure, and financial reporting”. Journal of accounting and economics 36 (1-3): 337–86.
Hribar, Paul, và Daniel W Collins. 2002. “Errors in estimating accruals: Implications for empirical research”. Journal of Accounting research 40 (1): 105–34.
Khan, Mozaffar. 2008. “Are accruals mispriced? Evidence from tests of an intertemporal capital asset pricing model”. Journal of Accounting and Economics 45 (1): 55–77.
Khanh, Hoang Thi Mai, và Vinh Khuong Nguyen. 2018. “Audit quality, firm characteristics and real earnings management: The case of listed Vietnamese firms”. International Journal of Economics and Financial Issues 8 (4): 243.
Kraft, Arthur, Andrew J Leone, và Charles Wasley. 2006. “An analysis of the theories and explanations offered for the mispricing of accruals and accrual components”. Journal of Accounting Research 44 (2): 297–339.
Mishkin, Frederic S. 1983. “Are market forecasts rational?” Trong A rational expectations approach to macroeconometrics: Testing policy ineffectiveness and efficient-markets models, 59–75. University of Chicago Press.
———. 2007. A rational expectations approach to macroeconometrics: Testing policy ineffectiveness and efficient-markets models. University of Chicago Press.
Sloan, Richard G. 1996. “Do stock prices fully reflect information in accruals and cash flows about future earnings?”Accounting review, 289–315.
# Các khoản dồn tích, tính bền vững của lợi nhuận và hiệu quả thị trường```{python}#| label: setup#| message: falseimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as mtickerimport statsmodels.api as smimport statsmodels.formula.api as smffrom scipy import statsfrom itertools import productimport warningswarnings.filterwarnings("ignore")plt.rcParams.update({"figure.dpi": 150,"axes.spines.top": False,"axes.spines.right": False,"font.size": 11,})```Kế toán dồn tích là nền tảng của việc lập báo cáo tài chính hiện đại. Theo nguyên tắc dồn tích, doanh thu được ghi nhận khi đã thực hiện và chi phí được ghi nhận khi phát sinh, bất kể thời điểm tiền thực sự được thu hay chi. Độ lệch thời gian giữa các sự kiện kinh tế và việc thực hiện bằng tiền này tạo ra **các khoản dồn tích** (tức là phần phi tiền mặt của lợi nhuận được báo cáo). Về mặt hình thức, chúng ta định nghĩa tổng các khoản dồn tích như sau:$$\text{Accruals}_t = \text{Earnings}_t - \text{Cash Flow from Operations}_t$$ {#eq-accruals-def}Sự phân biệt giữa các khoản dồn tích và dòng tiền quan trọng vì hai thành phần này của lợi nhuận có các tính chất thống kê khác biệt rõ rệt. Dòng tiền từ hoạt động kinh doanh có xu hướng bền vững hơn và khó bị nhà quản lý thao túng hơn, trong khi các khoản dồn tích vốn mang tính nhất thời hơn và chịu sự điều chỉnh tùy ý của nhà quản lý thông qua các ước tính, giả định và lựa chọn thời điểm [@dechow2010understanding].@sloan1996stock đã chứng minh hai quy luật thực nghiệm quan trọng trên dữ liệu Mỹ:1. Thành phần dồn tích của lợi nhuận *kém bền vững hơn* thành phần dòng tiền trong việc dự báo lợi nhuận tương lai, và2. Giá cổ phiếu vận động như thể nhà đầu tư không phân biệt được các thành phần này, coi các khoản dồn tích có cùng mức bền vững như dòng tiền. Phát hiện thứ hai này hàm ý một mô thức có thể dự báo được trong lợi nhuận cổ phiếu (tức là các doanh nghiệp có dồn tích cao thu được lợi nhuận thấp hơn ở kỳ sau, và ngược lại, được gọi là **hiện tượng bất thường về dồn tích**).### Vì sao là Việt Nam?Thị trường chứng khoán Việt Nam là một phòng thí nghiệm hấp dẫn để nghiên cứu động thái của các khoản dồn tích, vì một số lý do sau:1. **Chuẩn mực kế toán đang chuyển đổi.** Việt Nam áp dụng Chuẩn mực Kế toán Việt Nam (VAS), phần lớn dựa trên các Chuẩn mực Kế toán Quốc tế cũ hơn nhưng chưa hội tụ hoàn toàn với IFRS. VAS vẫn giữ một số quy định mang tính quy tắc cứng, có thể tạo ra các mô thức dồn tích khác với các khung dựa trên nguyên tắc ở các thị trường phát triển.2. **Ảnh hưởng của doanh nghiệp nhà nước (DNNN).** Một tỷ lệ đáng kể các doanh nghiệp niêm yết trên HOSE và HNX là các DNNN cũ hoặc vẫn còn sở hữu nhà nước một phần. Các doanh nghiệp này có thể đối mặt với những động cơ khác trong việc quản lý các khoản dồn tích (mang tính chính trị thay vì thuần túy kinh tế), tạo ra tính không đồng nhất vốn không có trong các nghiên cứu gốc trên thị trường Mỹ.3. **Mức độ trưởng thành của thị trường và sự thành thạo của nhà đầu tư.** Thị trường chứng khoán Việt Nam, với HOSE thành lập năm 2000 và HNX năm 2005, vẫn đang phát triển. Nhà đầu tư cá nhân chi phối khối lượng giao dịch, và hạ tầng thể chế (mức bao phủ của nhà phân tích, hạn chế bán khống, các trung gian thông tin) kém phát triển hơn so với Mỹ. Môi trường này có thể khuếch đại hoặc làm suy yếu các mô thức định giá sai được ghi nhận ở các thị trường phát triển.4. **Biên độ giá hằng ngày.** Cả HOSE ($\pm$ 7%) và HNX ($\pm$ 10%) đều áp dụng biên độ giá hằng ngày, có thể cản trở khám phá giá và tạo ra sự phụ thuộc đường đi trong việc đo lường lợi nhuận mà bối cảnh Mỹ không có.5. **Động thái tăng trưởng của thị trường mới nổi.** Các nền kinh tế tăng trưởng cao tạo ra các hồ sơ dồn tích khác biệt: tăng trưởng doanh thu nhanh về mặt cơ học tạo ra các khoản dồn tích vốn lưu động lớn ngay cả khi không có bất kỳ sự thao túng nào của nhà quản lý [@fairfield2003accrued].## Đo lường các khoản dồn tích {#sec-accruals-measuring}### Cách tiếp cận bảng cân đối kế toánCách tiếp cận truyền thống để đo lường các khoản dồn tích, được dùng trong phần lớn các nghiên cứu ban đầu, xây dựng tổng các khoản dồn tích từ các ảnh chụp bảng cân đối kế toán liên tiếp. Định nghĩa các khoản mục bảng cân đối sau cho doanh nghiệp $i$ trong kỳ $t$ (@tbl-accruals-bs-items).| Symbol | Description | VAS Equivalent ||-------------------|-------------------------|----------------------------|| $\Delta CA_{i,t}$ | Change in current assets | Thay đổi tài sản ngắn hạn || $\Delta Cash_{i,t}$ | Change in cash and equivalents | Thay đổi tiền và tương đương tiền || $\Delta CL_{i,t}$ | Change in current liabilities | Thay đổi nợ ngắn hạn || $\Delta STD_{i,t}$ | Change in short-term debt | Thay đổi vay ngắn hạn || $\Delta TP_{i,t}$ | Change in taxes payable | Thay đổi thuế phải nộp || $Dep_{i,t}$ | Depreciation and amortization | Khấu hao TSCĐ |: Các khoản mục chính của bảng cân đối kế toán dùng để đo lường các khoản dồn tích {#tbl-accruals-bs-items}Tổng các khoản dồn tích theo cách tiếp cận bảng cân đối kế toán là:$$ACC^{BS}_{i,t} = (\Delta CA_{i,t} - \Delta Cash_{i,t}) - (\Delta CL_{i,t} - \Delta STD_{i,t} - \Delta TP_{i,t}) - Dep_{i,t}$$ {#eq-bs-accruals}Trực giác đằng sau @eq-bs-accruals khá đơn giản. Thay đổi của tài sản ngắn hạn phi tiền mặt (như các khoản phải thu và hàng tồn kho) thể hiện doanh thu được ghi nhận hoặc chi phí được hoãn lại mà không có dòng tiền tương ứng. Thay đổi của nợ ngắn hạn hoạt động (không bao gồm nợ vay) phản ánh các chi phí được ghi nhận mà không có dòng tiền chi ra. Nợ vay ngắn hạn và thuế phải nộp bị loại ra vì chúng liên quan đến tài trợ và thời điểm nộp thuế chứ không phải các khoản dồn tích hoạt động. Khấu hao được trừ đi như một khoản chi phí phi tiền mặt trong lợi nhuận.Tất cả các biến thường được chia cho tổng tài sản bình quân để kiểm soát quy mô doanh nghiệp:$$acc_{i,t} = \frac{ACC^{BS}_{i,t}}{(\text{Assets}_{i,t} + \text{Assets}_{i,t-1})/2}$$ {#eq-scaled-accruals}### Cách tiếp cận báo cáo lưu chuyển tiền tệ@hribar2002errors đã chứng minh rằng cách tiếp cận bảng cân đối kế toán gây ra sai số đo lường vì các sự kiện phi hoạt động, như sáp nhập, mua lại, thoái vốn và chuyển đổi ngoại tệ, ảnh hưởng đến số dư tài sản và nợ ngắn hạn mà không có tác động tương ứng lên lợi nhuận. Họ ủng hộ một cách tiếp cận đơn giản và chính xác hơn:$$ACC^{CF}_{i,t} = \text{Earnings}_{i,t} - \text{CFO}_{i,t}$$ {#eq-cf-accruals}trong đó $\text{CFO}_{i,t}$ là dòng tiền từ hoạt động kinh doanh được báo cáo trực tiếp trên báo cáo lưu chuyển tiền tệ.### Bối cảnh Việt NamVới các doanh nghiệp niêm yết Việt Nam, cách tiếp cận báo cáo lưu chuyển tiền tệ nhìn chung được ưu tiên hơn, nhưng người thực hành nên lưu ý một số vấn đề về dữ liệu:- **Thông tư 200/2014/TT-BTC** chuẩn hóa hệ thống tài khoản và các mẫu báo cáo tài chính. Dòng tiền từ hoạt động kinh doanh được hầu hết doanh nghiệp báo cáo theo *phương pháp gián tiếp* (bắt đầu từ lợi nhuận ròng và điều chỉnh các khoản phi tiền mặt), dù một số doanh nghiệp dùng phương pháp trực tiếp.- **VAS 24** (Báo cáo lưu chuyển tiền tệ) điều chỉnh việc trình bày thông tin. Khác với IFRS, cách xử lý lãi vay đã trả và cổ tức nhận được trong phần hoạt động kinh doanh theo VAS kém linh hoạt hơn, có thể ảnh hưởng đến tính so sánh được.Trong phần còn lại của chương này, chúng ta dùng cách tiếp cận bảng cân đối kế toán khi minh họa trên dữ liệu mô phỏng (để minh bạch về mặt sư phạm) và cách tiếp cận báo cáo lưu chuyển tiền tệ trên dữ liệu doanh nghiệp thực tế khi có sẵn.## Phân tích mô phỏng {#sec-accruals-simulation}Trước khi chuyển sang dữ liệu thị trường Việt Nam, chúng ta xây dựng một mô phỏng để hình thành trực giác kinh tế về việc *vì sao* tính bền vững của các khoản dồn tích khác với tính bền vững của dòng tiền, và sai số ước tính trong kế toán dồn tích đóng vai trò gì trong việc tạo ra sự khác biệt này.### Mô hìnhXét một doanh nghiệp được đơn giản hóa như sau:- Bán hàng chịu với biên lợi nhuận gộp không đổi $\mu$- Tuân theo quá trình doanh thu AR(1): $S_t = \bar{S} + \rho(S_{t-1} - \bar{S}) + \varepsilon_t$, trong đó $\varepsilon_t \sim N(0, \sigma^2_S)$- Thu hồi các khoản phải thu ở kỳ kế tiếp, với tỷ lệ vỡ nợ thực $\delta$- Ghi nhận dự phòng nợ phải thu khó đòi bằng một tỷ lệ $\alpha$ của doanh thu hiện tại- Trả cổ tức bằng 100% lợi nhuận ròngTham số trọng tâm là $\alpha$, ước tính của nhà quản lý về nợ xấu. Khi $\alpha = \delta$ (tỷ lệ vỡ nợ thực), hệ thống kế toán không chệch. Khi $\alpha \neq \delta$, các khoản dồn tích chứa sai số ước tính ảnh hưởng đến tính bền vững.```{python}#| label: sim-function#| code-summary: "Simulation function for a single firm"def simulate_firm( alpha: float=0.03, n_years: int=20, delta: float=0.03, gross_margin: float=0.80, mean_sales: float=1000.0, sd_sales: float=100.0, rho: float=0.9, beg_cash: float=1500.0, rng: np.random.Generator =None,) -> pd.DataFrame:""" Simulate financial statements for a single firm. Parameters ---------- alpha : float Managerial estimate of doubtful debt rate (allowance parameter). n_years : int Number of years to simulate. delta : float True economic default rate on receivables. gross_margin : float Gross margin on sales. mean_sales : float Long-run mean of the AR(1) sales process. sd_sales : float Standard deviation of the sales innovation. rho : float AR(1) persistence parameter for sales. beg_cash : float Beginning cash balance. rng : numpy Generator Random number generator for reproducibility. Returns ------- pd.DataFrame Simulated financial statement data. """if rng isNone: rng = np.random.default_rng(42)# Generate AR(1) sales errors = rng.normal(0, sd_sales, n_years) sales = np.zeros(n_years) sales[0] = mean_sales + errors[0]for t inrange(1, n_years): sales[t] = mean_sales + rho * (sales[t -1] - mean_sales) + errors[t]# Allocate arrays cogs = (1- gross_margin) * sales ar = sales.copy() # all sales on credit allowance = alpha * sales # allowance for doubtful debts writeoffs = np.zeros(n_years) collections = np.zeros(n_years) bad_debt_exp = np.zeros(n_years) net_income = np.zeros(n_years) dividends = np.zeros(n_years) cash = np.zeros(n_years) equity = np.zeros(n_years)# Year 1 bad_debt_exp[0] = allowance[0] net_income[0] = sales[0] - cogs[0] - bad_debt_exp[0] dividends[0] = net_income[0] cash[0] = beg_cash + collections[0] - cogs[0] - dividends[0] equity[0] = beg_cash + net_income[0] - dividends[0]# Years 2 through n_yearsfor t inrange(1, n_years): writeoffs[t] = delta * ar[t -1] collections[t] = (1- delta) * ar[t -1] bad_debt_exp[t] = allowance[t] - allowance[t -1] + writeoffs[t] net_income[t] = sales[t] - cogs[t] - bad_debt_exp[t] dividends[t] = net_income[t] cash[t] = cash[t -1] + collections[t] - cogs[t] - dividends[t] equity[t] = equity[t -1] + net_income[t] - dividends[t]return pd.DataFrame({"year": np.arange(1, n_years +1),"alpha": alpha,"sales": sales,"cogs": cogs,"ar": ar,"allowance": allowance,"writeoffs": writeoffs,"collections": collections,"bad_debt_exp": bad_debt_exp,"net_income": net_income,"dividends": dividends,"cash": cash,"equity": equity, })```### Tạo một doanh nghiệp đơn lẻTrước hết, chúng ta tạo 1.000 năm dữ liệu cho một doanh nghiệp đơn lẻ với $\alpha = \delta = 0.03$ (kế toán không chệch) để trực quan hóa quá trình doanh thu.```{python}#| label: fig-sales-sim#| fig-cap: "Doanh thu mô phỏng của một doanh nghiệp đơn lẻ trong 20 năm. Đường đứt nét màu xanh thể hiện doanh thu trung bình. Cấu trúc AR(1) tạo ra các dao động mượt và bền vững."rng = np.random.default_rng(2024)df_long = simulate_firm(alpha=0.03, n_years=1000, rng=rng)fig, ax = plt.subplots()subset = df_long.query("year <= 20")ax.plot(subset["year"], subset["sales"], color="firebrick", linewidth=1.5)ax.axhline( df_long["sales"].mean(), color="steelblue", linestyle="--", linewidth=1, label="Long-run mean")ax.set_xlabel("Year")ax.set_ylabel("Sales (millions VND, simulated)")ax.legend()plt.tight_layout()plt.show()```### Mô phỏng chéo: tính bền vững và sai số ước tínhHiểu biết kinh tế trung tâm là khi ước tính $\alpha$ của nhà quản lý lệch khỏi tỷ lệ thực $\delta$, các khoản dồn tích chứa một sai số ước tính mang tính hệ thống làm *giảm* tính bền vững của lợi nhuận. Để minh họa, chúng ta mô phỏng 5.000 doanh nghiệp, mỗi doanh nghiệp có $\alpha \in [0.01, 0.05]$ được rút ngẫu nhiên trong khi giữ tỷ lệ vỡ nợ thực cố định ở $\delta = 0.03$.Với mỗi doanh nghiệp, chúng ta ước lượng tính bền vững của lợi nhuận bằng hệ số góc $\hat{\beta}_1$ từ hồi quy AR(1) của lợi nhuận ròng:$$NI_{i,t} = \beta_0 + \beta_1 NI_{i,t-1} + u_{i,t}$$ {#eq-persistence-reg}```{python}#| label: sim-cross-section#| code-summary: "Cross-sectional simulation of persistence vs. alpha"def estimate_persistence(df: pd.DataFrame) ->dict:"""Estimate AR(1) persistence of net income for one firm.""" temp = df[["year", "net_income"]].copy() temp["lag_ni"] = temp["net_income"].shift(1) temp = temp.dropna()iflen(temp) <10:return {"alpha": df["alpha"].iloc[0], "persistence": np.nan} X = sm.add_constant(temp["lag_ni"]) model = sm.OLS(temp["net_income"], X).fit()return {"alpha": df["alpha"].iloc[0], "persistence": model.params["lag_ni"]}n_firms =5000rng_main = np.random.default_rng(2024)alphas = rng_main.uniform(0.01, 0.05, n_firms)results = []for i, a inenumerate(alphas): firm_rng = np.random.default_rng(2024+ i) firm_df = simulate_firm(alpha=a, n_years=200, rng=firm_rng) results.append(estimate_persistence(firm_df))sim_results = pd.DataFrame(results)``````{python}#| label: fig-persistence-alpha#| fig-cap: "Tính bền vững của lợi nhuận so với tham số dự phòng ($\\alpha$). Tính bền vững đạt đỉnh gần $\\alpha = 0.03$, tỷ lệ vỡ nợ thực, và giảm đối xứng khi ước tính kế toán lệch khỏi thực tế kinh tế theo cả hai hướng."fig, ax = plt.subplots()ax.scatter( sim_results["alpha"], sim_results["persistence"], alpha=0.15, s=8, color="steelblue", edgecolors="none")ax.set_xlabel(r"Allowance parameter ($\alpha$)")ax.set_ylabel("Estimated earnings persistence")ax.axvline(0.03, color="firebrick", linestyle="--", linewidth=1, label=r"$\delta = 0.03$(true rate)")ax.legend()plt.tight_layout()plt.show()```### Phân rã tính bền vững theo thành phần lợi nhuậnMô phỏng cho phép chúng ta kiểm chứng dự báo lý thuyết cốt lõi: tính bền vững của dòng tiền vượt tính bền vững của các khoản dồn tích. Chúng ta tính dòng tiền hoạt động và các khoản dồn tích cho từng doanh nghiệp mô phỏng và ước lượng tính bền vững riêng cho từng thành phần.```{python}#| label: sim-component-persistence#| code-summary: "Component persistence in simulated data"def component_persistence(df: pd.DataFrame) ->dict:"""Estimate persistence of NI, CFO, and accruals.""" temp = df.copy()# CFO = collections - COGS (direct method, simplified) temp["cfo"] = temp["collections"] - temp["cogs"] temp["acc"] = temp["net_income"] - temp["cfo"] out = {"alpha": temp["alpha"].iloc[0]}for var in ["net_income", "cfo", "acc"]: t = temp[["year", var]].copy() t["lag"] = t[var].shift(1) t = t.dropna()iflen(t) <10: out[f"persist_{var}"] = np.nancontinue X = sm.add_constant(t["lag"]) model = sm.OLS(t[var], X).fit() out[f"persist_{var}"] = model.params["lag"]return out# Run for a subset at alpha = 0.03 (unbiased) and alpha = 0.05 (biased)component_results = []for a_val in [0.01, 0.02, 0.03, 0.04, 0.05]:for seed_offset inrange(500): frng = np.random.default_rng(10000+ seed_offset) fdf = simulate_firm(alpha=a_val, n_years=200, rng=frng) component_results.append(component_persistence(fdf))comp_df = pd.DataFrame(component_results)``````{python}#| label: tbl-sim-persistence#| tbl-cap: "Tính bền vững trung bình của các thành phần lợi nhuận theo tham số dự phòng. Tính bền vững của dòng tiền ổn định qua các giá trị $\\alpha$, trong khi tính bền vững của các khoản dồn tích và của lợi nhuận tổng thể đạt đỉnh khi ước tính kế toán khớp với tỷ lệ vỡ nợ thực ($\\delta = 0.03$)."summary = ( comp_df .groupby("alpha")[["persist_net_income", "persist_cfo", "persist_acc"]] .mean() .round(4) .rename(columns={"persist_net_income": "Earnings","persist_cfo": "Cash Flows","persist_acc": "Accruals", }))summary.index.name ="α"summary```Mô phỏng xác nhận một hiểu biết then chốt: tính bền vững của dòng tiền gần như không thay đổi theo chất lượng ước tính các khoản dồn tích, trong khi tính bền vững của các khoản dồn tích, và do đó của tổng lợi nhuận, suy giảm khi ước tính của nhà quản lý lệch khỏi thực tế kinh tế. Điều này cung cấp lời giải thích cấu trúc cho quy luật thực nghiệm được ghi nhận trong @sloan1996stock: các khoản dồn tích kém bền vững hơn *vì* chúng chứa sai số ước tính vốn hồi quy về trung bình khi hệ thống kế toán tự hiệu chỉnh theo thời gian.::: callout-note## Diễn giải cho Việt NamTrong bối cảnh Việt Nam, cơ chế này được khuếch đại bởi một số yếu tố thể chế. Các quy định của VAS về dự phòng nợ phải thu khó đòi (Thông tư 228/2009/TT-BTC, được cập nhật bởi Thông tư 48/2019/TT-BTC) quy định các tỷ lệ cụ thể theo thời gian quá hạn thay vì cho phép nhà quản lý toàn quyền quyết định. Dù cách tiếp cận dựa trên quy tắc này làm giảm một số hình thức thao túng, nó có thể *làm tăng* sai số ước tính khi các tỷ lệ quy định lệch khỏi kinh nghiệm vỡ nợ riêng của doanh nghiệp, đặc biệt liên quan đến các doanh nghiệp trong những ngành thay đổi nhanh như phát triển bất động sản hoặc sản xuất xuất khẩu.:::## Tính bền vững của lợi nhuận trong dữ liệu Việt Nam {#sec-accruals-persistence}Bây giờ chúng ta chuyển sang phân tích thực nghiệm dùng dữ liệu các doanh nghiệp niêm yết Việt Nam. Các yêu cầu về dữ liệu là:- **Báo cáo tài chính năm** của các doanh nghiệp niêm yết trên HOSE và HNX- **Dữ liệu lợi nhuận cổ phiếu**: Giá đóng cửa điều chỉnh hằng tháng để tính lợi nhuận- **Phân loại ngành**: mã VSIC (Hệ thống ngành kinh tế Việt Nam)### Chuẩn bị dữ liệuĐoạn mã sau xây dựng các thước đo dồn tích từ báo cáo tài chính của doanh nghiệp Việt Nam. Chúng ta minh họa quy trình với giả định dữ liệu được nạp từ cơ sở dữ liệu cục bộ hoặc các tệp CSV. Hãy điều chỉnh bước nạp dữ liệu cho phù hợp với nguồn của bạn.```{python}#| label: data-prep#| code-summary: "Construct accrual variables from Vietnamese financial statement data"#| eval: false# ─── Data Loading (adapt to your source) ───────────────────────────# funda = pd.read_parquet("data/vn_annual_financials.parquet")# prices = pd.read_parquet("data/vn_monthly_prices.parquet")# ─── Variable Construction ──────────────────────────────────────────def construct_accruals(funda: pd.DataFrame) -> pd.DataFrame:""" Construct accrual measures from Vietnamese annual financial data. Expected columns (VAS-aligned): ticker, year, datadate, act (current assets), lct (current liabilities), che (cash & equivalents), dlc (short-term borrowings), txp (taxes payable), dp (depreciation & amortization), oiadp (operating income after depreciation), at (total assets), cfo (cash flow from operations), exchange (HOSE=1, HNX=2), vsic2 (2-digit industry code) """ df = funda.sort_values(["ticker", "year"]).copy()# Fill missing with zero where economically appropriatefor col in ["che", "dlc", "txp"]: df[col] = df[col].fillna(0)# Lagged total assets and average total assets df["lag_at"] = df.groupby("ticker")["at"].shift(1) df["avg_at"] = (df["at"] + df["lag_at"]) /2# Balance sheet approach to accrualsfor col in ["act", "che", "lct", "dlc", "txp"]: df[f"d_{col}"] = df.groupby("ticker")[col].diff() df["acc_bs"] = ( (df["d_act"] - df["d_che"])- (df["d_lct"] - df["d_dlc"] - df["d_txp"])- df["dp"] )# Scaled variables df["earn"] = df["oiadp"] / df["avg_at"] df["acc"] = df["acc_bs"] / df["avg_at"] df["cfo"] = df["earn"] - df["acc"]# If CFO from cash flow statement is available, prefer itif"cfo_stmt"in df.columns: df["cfo_direct"] = df["cfo_stmt"] / df["avg_at"] df["acc_cf"] = df["earn"] - df["cfo_direct"]# Lead earnings (next year) df["lead_earn"] = df.groupby("ticker")["earn"].shift(-1)# Decile ranks (within each year for cross-sectional analysis)for var in ["acc", "earn", "cfo"]: df[f"{var}_decile"] = ( df.groupby("year")[var] .transform(lambda x: pd.qcut(x, 10, labels=False, duplicates="drop") +1) ) df["lead_earn_decile"] = ( df.groupby("year")["lead_earn"] .transform(lambda x: pd.qcut(x, 10, labels=False, duplicates="drop") +1) )# Filter df = df.query("avg_at > 0").dropna(subset=["acc", "earn", "cfo", "lead_earn"])return df```### Dữ liệu mô phỏng kiểu Việt Nam để minh họaVì không thể phân phối dữ liệu độc quyền trong chương này, chúng ta tạo dữ liệu tổng hợp mô phỏng các tính chất chéo của các doanh nghiệp niêm yết Việt Nam. Các tham số được hiệu chỉnh để xấp xỉ các giá trị quan sát được trên thị trường Việt Nam.```{python}#| label: gen-demo-data#| code-summary: "Generate synthetic Vietnamese-style panel data"def generate_vn_panel( n_firms: int=400, n_years: int=15, seed: int=2024,) -> pd.DataFrame:""" Generate a synthetic panel dataset with properties resembling Vietnamese listed firms for demonstration purposes. """ rng = np.random.default_rng(seed) records = []for i inrange(n_firms):# Firm-specific parameters mean_earn = rng.normal(0.08, 0.04) # mean ROA ~8% persist = rng.uniform(0.3, 0.85) # earnings persistence acc_share = rng.normal(0.0, 0.03) # mean accrual level acc_noise = rng.uniform(0.02, 0.06) # accrual volatility# SOE indicator (≈30% of Vietnamese listed firms) is_soe =int(rng.random() <0.30)# Exchange: HOSE (1) vs HNX (2) exchange =1if rng.random() <0.6else2# VSIC 2-digit code vsic2 = rng.choice([10, 20, 25, 41, 46, 47, 52, 62, 64, 68]) earn_t = mean_earnfor t inrange(n_years): year =2009+ t shock = rng.normal(0, 0.04) earn_t = mean_earn + persist * (earn_t - mean_earn) + shock# Accruals: base + firm-specific noise# SOEs tend to have slightly smoother accruals soe_adj =-0.005if is_soe else0.0 acc_t = acc_share + soe_adj + rng.normal(0, acc_noise) cfo_t = earn_t - acc_t records.append({"ticker": f"VN{i:04d}","year": year,"earn": earn_t,"acc": acc_t,"cfo": cfo_t,"is_soe": is_soe,"exchange": exchange,"vsic2": vsic2, }) df = pd.DataFrame(records)# Lead earnings df = df.sort_values(["ticker", "year"]) df["lead_earn"] = df.groupby("ticker")["earn"].shift(-1)# Decile ranks within yearfor var in ["acc", "earn", "cfo"]: df[f"{var}_decile"] = ( df.groupby("year")[var] .transform(lambda x: pd.qcut( x, 10, labels=False, duplicates="drop" ) +1) ) df["lead_earn_decile"] = ( df.groupby("year")["lead_earn"] .transform(lambda x: pd.qcut( x, 10, labels=False, duplicates="drop" ) +1) )# Simulate size-adjusted returns# Returns load on contemporaneous earnings surprise and lagged mispricing df["size_adj_ret"] = (1.5* (df["lead_earn"] - df["earn"]) # earnings surprise-0.25* df["acc"] # accrual mispricing+ rng.normal(0, 0.30, len(df)) # noise ) df = df.dropna(subset=["lead_earn", "size_adj_ret"])return dfpanel = generate_vn_panel(n_firms=500, n_years=15, seed=2024)print(f"Panel: {panel.shape[0]:,} firm-years, "f"{panel['ticker'].nunique()} firms, "f"{panel['year'].nunique()} years")```### Thống kê mô tả theo thập phân vị dồn tích@tbl-desc-decile báo cáo giá trị trung bình của lợi nhuận, các khoản dồn tích và dòng tiền theo thập phân vị dồn tích. Mô thức này phải phản ánh phép phân rã cơ học: $\text{earn} = \text{acc} + \text{cfo}$.```{python}#| label: tbl-desc-decile#| tbl-cap: "Lợi nhuận, các khoản dồn tích và dòng tiền trung bình theo thập phân vị dồn tích. Các doanh nghiệp ở thập phân vị dồn tích thấp nhất có dòng tiền cao nhất, trong khi các doanh nghiệp dồn tích cao có dòng tiền bị nén hoặc âm, một mô thức phù hợp với đồng nhất thức kế toán."desc = ( panel .groupby("acc_decile")[["acc", "earn", "cfo"]] .mean() .round(4))desc.index.name ="Accrual Decile"desc.columns = ["Accruals", "Earnings", "Cash Flows"]desc```### Hồi quy tính bền vữngChúng ta ước lượng hồi quy tính bền vững gộp tương tự Bảng 2 của @sloan1996stock. Đặc tả cơ sở là:$$\text{Earnings}_{i,t+1} = \gamma_0 + \gamma_1 \text{Earnings}_{i,t} + \epsilon_{i,t}$$ {#eq-persist-baseline}tiếp theo là phép phân rã:$$\text{Earnings}_{i,t+1} = \gamma_0 + \gamma_a \text{Accruals}_{i,t} + \gamma_c \text{CFO}_{i,t} + \epsilon_{i,t}$$ {#eq-persist-decomp}Giả thuyết về tính bền vững khác biệt là $H_0: \gamma_a = \gamma_c$, được kiểm định bằng kiểm định $F$ chuẩn.```{python}#| label: tbl-persistence#| tbl-cap: "Hồi quy tính bền vững của lợi nhuận. Cột (1) ước lượng tính bền vững tổng hợp. Cột (2) phân rã lợi nhuận thành thành phần dồn tích và thành phần dòng tiền. Hệ số của các khoản dồn tích thấp hơn một cách có ý nghĩa thống kê so với của dòng tiền, xác nhận tính bền vững khác biệt."# Column (1): Aggregate persistencemod1 = smf.ols("lead_earn ~ earn", data=panel).fit()# Column (2): Component persistencemod2 = smf.ols("lead_earn ~ acc + cfo", data=panel).fit()# F-test for H0: coef(acc) = coef(cfo)f_test = mod2.f_test("acc = cfo")results_table = pd.DataFrame({"(1) Aggregate": {"Intercept": f"{mod1.params['Intercept']:.4f} ({mod1.bse['Intercept']:.4f})","Earnings": f"{mod1.params['earn']:.4f} ({mod1.bse['earn']:.4f})","Accruals": "","Cash Flows": "","N": f"{int(mod1.nobs):,}","R²": f"{mod1.rsquared:.3f}","F-test (acc=cfo)": "", },"(2) Components": {"Intercept": f"{mod2.params['Intercept']:.4f} ({mod2.bse['Intercept']:.4f})","Earnings": "","Accruals": f"{mod2.params['acc']:.4f} ({mod2.bse['acc']:.4f})","Cash Flows": f"{mod2.params['cfo']:.4f} ({mod2.bse['cfo']:.4f})","N": f"{int(mod2.nobs):,}","R²": f"{mod2.rsquared:.3f}","F-test (acc=cfo)": f"F = {float(f_test.fvalue):.2f}, p = {float(f_test.pvalue):.4f}", },})results_table```### Tính bền vững ở cấp độ ngànhCác hồi quy toàn thị trường có thể che giấu tính không đồng nhất giữa các ngành. Cơ cấu ngành của Việt Nam tập trung vào sản xuất, bất động sản, ngân hàng và bán lẻ (tức là các lĩnh vực có hồ sơ dồn tích rất khác nhau). Chúng ta ước lượng tính bền vững riêng theo mã VSIC hai chữ số.```{python}#| label: tbl-industry-persistence#| tbl-cap: "Phân phối các hệ số bền vững ở cấp độ ngành. Mỗi hàng báo cáo các thống kê về phân phối của các hệ số ước lượng trên các ngành VSIC 2 chữ số."def industry_persistence(df: pd.DataFrame) -> pd.DataFrame:"""Estimate persistence regressions by VSIC 2-digit code.""" coefs = []for vsic, group in df.groupby("vsic2"):iflen(group) <30:continuetry: mod = smf.ols("lead_earn ~ acc + cfo", data=group).fit() coefs.append({"vsic2": vsic,"intercept": mod.params["Intercept"],"acc": mod.params["acc"],"cfo": mod.params["cfo"], })exceptException:continuereturn pd.DataFrame(coefs)ind_coefs = industry_persistence(panel)ind_summary = ind_coefs[["intercept", "acc", "cfo"]].describe().loc[ ["mean", "25%", "50%", "75%"]].round(4)ind_summary.index = ["Mean", "Q1", "Median", "Q3"]ind_summary.columns = ["Intercept", "Accruals (γ_a)", "Cash Flows (γ_c)"]ind_summary```### Trực quan hóa tính bền vững@fig-persistence-bars so sánh hệ số bền vững của các khoản dồn tích và của dòng tiền giữa các ngành, cung cấp một phép kiểm tra trực quan cho giả thuyết tính bền vững khác biệt.```{python}#| label: fig-persistence-bars#| fig-cap: "Hệ số bền vững của các khoản dồn tích so với dòng tiền theo ngành VSIC. Ở hầu hết mọi ngành, tính bền vững của dòng tiền vượt tính bền vững của các khoản dồn tích, phù hợp với giả thuyết tính bền vững khác biệt."iflen(ind_coefs) >2: ind_plot = ind_coefs.sort_values("cfo").reset_index(drop=True) fig, ax = plt.subplots(figsize=(8, 5)) x = np.arange(len(ind_plot)) width =0.35 ax.barh(x - width /2, ind_plot["acc"], width, label="Accruals", color="steelblue") ax.barh(x + width /2, ind_plot["cfo"], width, label="Cash Flows", color="firebrick") ax.set_yticks(x) ax.set_yticklabels([f"VSIC {int(v)}"for v in ind_plot["vsic2"]]) ax.set_xlabel("Persistence Coefficient") ax.legend() ax.set_title("Earnings Component Persistence by Industry") plt.tight_layout() plt.show()```## Định giá thị trường đối với các thành phần lợi nhuận {#sec-accruals-mispricing}Phân tích tính bền vững cho thấy các khoản dồn tích kém bền vững hơn dòng tiền. Câu hỏi về hiệu quả thị trường là liệu giá cổ phiếu có *phản ánh* sự khác biệt này hay không. Nếu nhà đầu tư ngây thơ coi cả hai thành phần là bền vững như nhau, điều mà @sloan1996stock gọi là "sự neo chặt vào lợi nhuận" (earnings fixation), thì một phần có thể dự báo của lợi nhuận tương lai phải liên quan đến cơ cấu dồn tích của lợi nhuận hiện tại.### Khung lý thuyếtGiả sử thị trường định giá lợi nhuận bằng:$$P_t = \frac{1}{r} \left[ \hat{\gamma}^* \cdot E_t \right]$$ {#eq-naive-pricing}trong đó $\hat{\gamma}^*$ là mức bền vững *được thị trường nhận thức* của lợi nhuận tổng hợp. Định giá hợp lý đòi hỏi:$$P_t = \frac{1}{r} \left[ \hat{\gamma}_a \cdot ACC_t + \hat{\gamma}_c \cdot CFO_t \right]$$ {#eq-rational-pricing}với $\hat{\gamma}_a < \hat{\gamma}_c$. Nếu thị trường dùng @eq-naive-pricing thay vì @eq-rational-pricing, thì các doanh nghiệp dồn tích cao bị *định giá quá cao* (vì thị trường đánh giá quá cao tính bền vững của phần lợi nhuận nặng về dồn tích) và các doanh nghiệp dồn tích thấp bị *định giá quá thấp*.### Kiểm định Abel–MishkinViệc kiểm định xem các hệ số định giá của thị trường có khớp với các hệ số dự báo hợp lý hay không có thể thực hiện theo cách tiếp cận của @abel1983optimal, tránh được sự phức tạp của hệ phi tuyến đầy đủ của @abel1983integrated, @mishkin1983market và @mishkin2007rational. Trực giác rất đơn giản: nếu các thành phần lợi nhuận trễ bị định giá sai, điều này phải phát hiện được trong hồi quy của *lợi nhuận bất thường tương lai* theo các thành phần đó:$$AR_{i,t+1} = \alpha + \beta_a \cdot ACC_{i,t} + \beta_c \cdot CFO_{i,t} + \eta_{i,t}$$ {#eq-abel-mishkin}Dưới định giá hiệu quả, $\beta_a = \beta_c = 0$: thông tin công khai trễ không có sức dự báo đối với lợi nhuận bất thường. Phát hiện $\beta_a < 0$ hàm ý thị trường định giá quá cao các khoản dồn tích và sau đó điều chỉnh.```{python}#| label: tbl-mispricing#| tbl-cap: "Hồi quy lợi nhuận bất thường. Cột (1) hồi quy lợi nhuận điều chỉnh theo quy mô theo các khoản dồn tích và dòng tiền trễ. Cột (2) dùng xếp hạng thập phân vị. Hệ số âm của các khoản dồn tích cho thấy thị trường định giá quá cao thành phần dồn tích và điều chỉnh ở kỳ tiếp theo."# Abel-Mishkin style testmod_am1 = smf.ols("size_adj_ret ~ acc + cfo", data=panel).fit()mod_am2 = smf.ols("size_adj_ret ~ acc_decile + cfo_decile", data=panel).fit()am_table = pd.DataFrame({"(1) Continuous": {"Intercept": f"{mod_am1.params['Intercept']:.4f} ({mod_am1.bse['Intercept']:.4f})","Accruals": f"{mod_am1.params['acc']:.4f} ({mod_am1.bse['acc']:.4f})","Cash Flows": f"{mod_am1.params['cfo']:.4f} ({mod_am1.bse['cfo']:.4f})","N": f"{int(mod_am1.nobs):,}","R²": f"{mod_am1.rsquared:.4f}", },"(2) Decile Ranks": {"Intercept": f"{mod_am2.params['Intercept']:.4f} ({mod_am2.bse['Intercept']:.4f})","Accruals": f"{mod_am2.params['acc_decile']:.4f} ({mod_am2.bse['acc_decile']:.4f})","Cash Flows": f"{mod_am2.params['cfo_decile']:.4f} ({mod_am2.bse['cfo_decile']:.4f})","N": f"{int(mod_am2.nobs):,}","R²": f"{mod_am2.rsquared:.4f}", },})am_table```### Diễn giải cho Việt NamGiả thuyết chú ý hạn chế của @hirshleifer2003limited cung cấp một lời giải thích đặc biệt hấp dẫn cho thị trường Việt Nam. Khi nhà đầu tư cá nhân chi phối giao dịch, như ở Việt Nam, nơi sự tham gia của nhà đầu tư cá nhân vượt 80% giá trị giao dịch hằng ngày, năng lực xử lý thông tin bị hạn chế. Nhà đầu tư có thể neo vào con số lợi nhuận công bố mà không phân rã thành thành phần dồn tích và dòng tiền. Việc thiếu cơ chế bán khống (Việt Nam chưa đưa ra bán khống có bảo đảm cho đến năm 2024) càng cản trở việc hiệu chỉnh định giá quá cao, có thể khiến hiện tượng bất thường về dồn tích kéo dài hơn so với các thị trường phát triển.## Hiện tượng bất thường về dồn tích {#sec-accruals-anomaly}### Lợi nhuận danh mục theo thập phân vị dồn tíchTheo cách tiếp cận danh mục của @sloan1996stock, chúng ta tính lợi nhuận trung bình điều chỉnh theo quy mô cho từng thập phân vị dồn tích. Nếu thị trường định giá sai các khoản dồn tích, chúng ta kỳ vọng một mô thức giảm đơn điệu: các doanh nghiệp dồn tích thấp (thập phân vị 1) thu được lợi nhuận bất thường dương, trong khi các doanh nghiệp dồn tích cao (thập phân vị 10) thu được lợi nhuận bất thường âm.```{python}#| label: tbl-anomaly-deciles#| tbl-cap: "Lợi nhuận trung bình điều chỉnh theo quy mô theo thập phân vị dồn tích. Lợi nhuận của danh mục mua–bán khống (mua thập phân vị 1, bán khống thập phân vị 10) và thống kê t của nó được báo cáo ở cuối bảng."# Compute annual portfolio returns (equal-weighted within decile-year)port_rets = ( panel .groupby(["year", "acc_decile"])["size_adj_ret"] .mean() .reset_index())# Regression approach: decile dummies (no intercept)port_rets["acc_decile_str"] ="D"+ port_rets["acc_decile"].astype(str).str.zfill(2)mod_port = smf.ols("size_adj_ret ~ C(acc_decile, Treatment(reference=0)) - 1", data=port_rets.assign(acc_decile=port_rets["acc_decile"].astype("category")),).fit()# Mean returns by deciledecile_means = ( port_rets .groupby("acc_decile")["size_adj_ret"] .agg(["mean", "std", "count"]) .round(4))decile_means["t_stat"] = ( decile_means["mean"] / (decile_means["std"] / np.sqrt(decile_means["count"]))).round(2)decile_means.columns = ["Mean Return", "Std Dev", "N Years", "t-stat"]# Hedge portfoliohedge_series = ( port_rets.query("acc_decile == 1").set_index("year")["size_adj_ret"]- port_rets.query("acc_decile == 10").set_index("year")["size_adj_ret"])hedge_mean = hedge_series.mean()hedge_t = hedge_mean / (hedge_series.std() / np.sqrt(len(hedge_series)))print(f"Hedge portfolio (D1 - D10): {hedge_mean:.4f}")print(f"t-statistic: {hedge_t:.2f}")print()decile_means```### Trực quan hóa hiện tượng bất thường```{python}#| label: fig-anomaly-bar#| fig-cap: "Lợi nhuận trung bình điều chỉnh theo quy mô theo thập phân vị dồn tích. Độ dốc đi xuống từ các thập phân vị dồn tích thấp đến cao phù hợp với việc thị trường định giá quá cao thành phần dồn tích của lợi nhuận."decile_plot = port_rets.groupby("acc_decile")["size_adj_ret"].mean()fig, ax = plt.subplots()colors = ["steelblue"if r >0else"firebrick"for r in decile_plot.values]ax.bar(decile_plot.index, decile_plot.values, color=colors, edgecolor="white")ax.axhline(0, color="black", linewidth=0.5)ax.set_xlabel("Accrual Decile")ax.set_ylabel("Mean Size-Adjusted Return")ax.set_xticks(range(1, 11))ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1, decimals=1))plt.tight_layout()plt.show()```### Tính ổn định theo chuỗi thời gianMột câu hỏi quan trọng đối với mọi hiện tượng bất thường là nó có tồn tại theo thời gian hay chỉ tập trung ở một số giai đoạn con. @fig-anomaly-ts vẽ lợi nhuận danh mục mua–bán khống theo năm.```{python}#| label: fig-anomaly-ts#| fig-cap: "Lợi nhuận danh mục mua–bán khống hằng năm (thập phân vị 1 trừ thập phân vị 10) theo thời gian. Giá trị dương cho thấy các doanh nghiệp dồn tích thấp vượt trội hơn các doanh nghiệp dồn tích cao. Biến thiên giữa các năm là đáng kể, phản ánh bản chất nhiễu của việc đo lợi nhuận theo năm."fig, ax = plt.subplots()ax.bar(hedge_series.index, hedge_series.values, color=["steelblue"if v >0else"firebrick"for v in hedge_series.values], edgecolor="white")ax.axhline(hedge_series.mean(), color="black", linestyle="--", linewidth=1, label=f"Mean = {hedge_series.mean():.1%}")ax.axhline(0, color="black", linewidth=0.5)ax.set_xlabel("Year")ax.set_ylabel("Hedge Portfolio Return")ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1, decimals=0))ax.legend()plt.tight_layout()plt.show()```## Thảo luận và các góc nhìn đương đại {#sec-accruals-discussion}### Các giải thích thay thếHiện tượng bất thường về dồn tích đã tạo ra một cuộc tranh luận sôi nổi trong tài liệu kế toán và tài chính. Một số giải thích thay thế đáng xem xét trong bối cảnh Việt Nam:**Giải thích dựa trên rủi ro.** @khan2008accruals lập luận rằng các doanh nghiệp dồn tích cao có thể thu được lợi nhuận thấp hơn vì chúng *ít rủi ro hơn*, chứ không phải vì bị định giá sai. Nếu CAPM hoặc các mô hình đa nhân tố không nắm bắt được cấu trúc rủi ro thực, điều có vẻ là hiện tượng bất thường có thể chỉ là phần bù cho các nhân tố rủi ro bị bỏ sót. Giải thích này khó đánh giá hơn ở Việt Nam do lịch sử hạn chế của các mô hình nhân tố được hiệu chỉnh theo dữ liệu trong nước.**Tăng trưởng và đầu tư.** @fairfield2003accrued chỉ ra rằng tính bền vững thấp của các khoản dồn tích mở rộng sang các khoản dồn tích dài hạn (chi tiêu vốn), gợi ý rằng hiện tượng này phản ánh lợi suất biên giảm dần của đầu tư chứ không phải thao túng lợi nhuận. Trong môi trường tăng trưởng cao của Việt Nam, kênh này có thể đặc biệt quan trọng vì các doanh nghiệp đầu tư mạnh tay trong các giai đoạn bùng nổ tín dụng.**Sai lệch do dữ liệu.** @kraft2006analysis nhận diện độ nhạy với giá trị ngoại lai và thiên lệch nhìn trước trong bằng chứng gốc. Dữ liệu tài chính Việt Nam, với lịch sử ngắn hơn và tần suất sai sót báo cáo cao hơn, đòi hỏi sự cảnh giác bổ sung ở những điểm này.**Ràng buộc thể chế.** Các hạn chế bán khống, phổ biến ở Việt Nam cho đến gần đây, ngăn các nhà kinh doanh chênh lệch giá hiệu chỉnh việc định giá quá cao. Kết hợp với chi phí giao dịch cao và sự tham gia hạn chế của nhà đầu tư tổ chức, điều này tạo ra một môi trường trong đó định giá sai có thể kéo dài ngay cả khi các nhà đầu tư thành thạo nhận ra nó.### Doanh nghiệp nhà nước và chất lượng các khoản dồn tíchMột đặc điểm riêng của thị trường Việt Nam là sự phổ biến của các DNNN và DNNN cũ. Một số giả thuyết có thể kiểm định nảy sinh:1. **Làm mượt vì mục tiêu chính trị:** Nhà quản lý DNNN có thể làm mượt lợi nhuận để đạt các mục tiêu của chính phủ, tạo ra các khoản dồn tích khác về bản chất so với của các doanh nghiệp tư nhân.2. **Chất lượng kiểm toán:** @khanh2018audit thấy rằng chất lượng kiểm toán thay đổi một cách hệ thống theo cơ cấu sở hữu ở Việt Nam. Chất lượng kiểm toán thấp hơn có thể cho phép thao túng các khoản dồn tích nhiều hơn.3. **Môi trường thông tin:** Các DNNN có thể công bố thông tin tự nguyện yếu hơn, làm tăng bất cân xứng thông tin giữa các khoản dồn tích và dòng tiền.Các giả thuyết này gợi ý rằng hiện tượng bất thường về dồn tích có thể biến thiên chéo giữa các doanh nghiệp theo các khía cạnh sở hữu riêng có của Việt Nam.### Các lưu ý về phương pháp luậnKhi triển khai phân tích này với dữ liệu Việt Nam thực tế, một số vấn đề thực hành cần được chú ý:**Sai số chuẩn.** Sai số chuẩn OLS gộp giả định độc lập giữa các quan sát doanh nghiệp–năm. Trên thực tế, tồn tại cả tương quan chéo (các cú sốc chung trong cùng một năm) lẫn tương quan chuỗi thời gian (tính bền vững ở cấp doanh nghiệp). Nên gom cụm sai số chuẩn theo doanh nghiệp và năm (gom cụm hai chiều) hoặc dùng quy trình Fama-MacBeth [@fama1973risk] với hiệu chỉnh Newey-West.**VAS-specific items.** Vietnamese financial statements include items without direct equivalents in Compustat, such as *chi phí trả trước* (prepaid expenses reported separately from current assets in some VAS templates). Researchers must map these carefully.**Biên độ giá.** Biên độ giá hằng ngày trên HOSE ($\pm$ 7%) và HNX ($\pm$ 10%) có thể cắt cụt phân phối lợi nhuận và tạo ra tương quan chuỗi trong lợi nhuận đo được. Với việc đo lợi nhuận trên cửa sổ 12 tháng, điều này ít gây vấn đề hơn nhưng vẫn nên được ghi lại.**Hiệu ứng sàn giao dịch.** Các doanh nghiệp niêm yết trên HOSE có xu hướng lớn hơn và thanh khoản hơn các doanh nghiệp niêm yết trên HNX. Phân tích riêng theo sàn, hoặc đưa vào hiệu ứng cố định theo sàn, có thể giúp bảo đảm kết quả không bị chi phối bởi khác biệt về thanh khoản.## Tóm tắtChương này xem xét kế toán dồn tích và các hàm ý của nó đối với tính bền vững của lợi nhuận và hiệu quả thị trường trong bối cảnh Việt Nam. Các phát hiện chính là:- Các khoản dồn tích là phần lợi nhuận không được hỗ trợ bởi dòng tiền đồng thời. Chúng phát sinh tự nhiên từ kế toán dồn tích nhưng cũng chứa các sai số ước tính và sự tùy ý của nhà quản lý.- Phân tích mô phỏng chứng minh rằng khi các ước tính kế toán lệch khỏi thực tế kinh tế, tính bền vững của các khoản dồn tích giảm xuống dưới tính bền vững của dòng tiền, cung cấp lời giải thích cấu trúc cho quy luật thực nghiệm.- Các hồi quy tính bền vững xác nhận rằng thành phần dồn tích của lợi nhuận kém bền vững hơn thành phần dòng tiền, một phát hiện đúng qua các ngành.- Các kiểm định định giá thị trường gợi ý rằng giá cổ phiếu trên thị trường Việt Nam có thể chưa phản ánh đầy đủ tính bền vững khác biệt của các thành phần lợi nhuận, làm nảy sinh hiện tượng bất thường về dồn tích.Môi trường thể chế Việt Nam cung cấp sự biến thiên phong phú cho nghiên cứu tương lai về mối tương tác giữa chất lượng kế toán, mức độ thành thạo của nhà đầu tư và hiệu quả thị trường.<!-- ## Bài tập1. **Kiểm chứng đồng nhất thức kế toán.** Dùng dữ liệu mô phỏng từ @sec-simulation, kiểm chứng rằng $\text{Earnings} = \text{Accruals} + \text{CFO}$ đúng chính xác. Tính độ lệch tuyệt đối lớn nhất trên tất cả các quan sát doanh nghiệp–năm.2. **Độ nhạy với tham số.** Sửa hàm mô phỏng để cho phép $\rho = 0$ (doanh thu i.i.d.). Điều này thay đổi tính bền vững của lợi nhuận và các thành phần của nó như thế nào? Điều này cho bạn biết gì về vai trò của quá trình kinh tế nền tảng so với việc đo lường kế toán?3. **Phân tích mẫu con DNNN.** Dùng bảng dữ liệu tổng hợp, ước lượng các hồi quy tính bền vững riêng cho các DNNN và doanh nghiệp ngoài nhà nước. Có bằng chứng nào về chất lượng các khoản dồn tích khác biệt theo loại hình sở hữu không?4. **Sai số chuẩn Fama-MacBeth.** Ước lượng lại các hồi quy tính bền vững bằng cách tiếp cận Fama-MacBeth: chạy các hồi quy chéo theo từng năm, sau đó tính trung bình chuỗi thời gian và sai số chuẩn của các ước lượng hệ số. So sánh các sai số chuẩn này với sai số chuẩn OLS gộp.5. **Phân rã theo mô hình Jones.** Triển khai mô hình @jones1991earnings để tách các khoản dồn tích thành thành phần "bình thường" và "bất thường". Đặc tả mô hình là:$$\frac{ACC_{i,t}}{A_{i,t-1}} = \alpha_1 \frac{1}{A_{i,t-1}} + \alpha_2 \frac{\Delta Rev_{i,t}}{A_{i,t-1}} + \alpha_3 \frac{PPE_{i,t}}{A_{i,t-1}} + \varepsilon_{i,t}$$ Ước lượng chéo theo năm và ngành. Các khoản dồn tích bất thường (phần dư $\hat{\varepsilon}$) có dự báo lợi nhuận tốt hơn tổng các khoản dồn tích không?6. **Đo lường theo VAS so với IFRS.** Nghiên cứu ba lĩnh vực cụ thể mà VAS khác IFRS theo cách ảnh hưởng đến đo lường các khoản dồn tích (ví dụ: ghi nhận doanh thu, kế toán thuê tài sản, phân loại công cụ tài chính). Với mỗi lĩnh vực, giải thích chiều hướng và mức độ tác động có thể có lên các khoản dồn tích đo được.7. **Ràng buộc bán khống.** Việt Nam đưa ra bán khống có giới hạn vào năm 2024. Thiết kế một khung sai khác trong sai khác (difference-in-differences) để kiểm định xem việc đưa vào bán khống có ảnh hưởng đến độ lớn của hiện tượng bất thường về dồn tích hay không. Các giả định nhận diện then chốt là gì? -->