#@title 輸入套件、接榫帳號 {display-mode: "form"}
#@title
# This code will be hidden when the notebook is loaded.
# 輸入套件
import os
import pandas as pd
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.model_selection import train_test_split, KFold
import numpy as np
import matplotlib.pyplot as plt
import gspread
# %matplotlib inline
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn import metrics
# seaborn
import seaborn as sns
from statsmodels.graphics.mosaicplot import mosaic
from scipy import stats
# importing libraries
import statsmodels.api as sm
from statsmodels.api import OLS
# 下載台北思源黑體並命名taipei_sans_tc_beta.ttf,移至指定路徑
!wget -O taipei_sans_tc_beta.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download
!mv taipei_sans_tc_beta.ttf /usr/local/lib/python3.7/dist-packages/matplotlib//mpl-data/fonts/ttf
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
# 自定義字體變數
myfont = FontProperties(fname=r'/usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/fonts/ttf/taipei_sans_tc_beta.ttf')
# 接榫帳號
from google.colab import auth
auth.authenticate_user()
import gspread
from oauth2client.client import GoogleCredentials
gc = gspread.authorize(GoogleCredentials.get_application_default())
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import f_regression
from sklearn import preprocessing, linear_model
import graphviz
from IPython.display import clear_output
clear_output()
#@title 接榫資料 {display-mode: "form"}
# This code will be hidden when the notebook is loaded.
# 接準資料_codebook
wb = gc.open_by_url('https://docs.google.com/spreadsheets/d/1U5hBbN8Oz898H4RDwF5tUKYajcEyeMVWDRse59ohOhM/edit#gid=1477927492')
sheet = wb.worksheet('codebook')
data = sheet.get_all_values()
codebook = pd.DataFrame(data)
codebook.columns = codebook.iloc[0]
codebook = codebook.iloc[1:]
# 接榫資料_資料集
wb = gc.open_by_url('https://docs.google.com/spreadsheets/d/1-SXZCvVTj4CXWhve770wuXc61Mq5nDj6b9qLtdTYcds/edit#gid=643294680')
sheet = wb.worksheet('data0513')
data = sheet.get_all_values()
df = pd.DataFrame(data)
df.columns = df.iloc[1]
df = df.iloc[2:]
df.head()
clear_output()
#@title 更改變項型態 {display-mode: "form"}
# This code will be hidden when the notebook is loaded.
#str int float
#手動確認變項型態,經濟地位用不到的變項沒有清理,先設為str
new_df_schema={
'case_ID':df['case_ID'].astype(str),
'sample_ID':df['sample_ID'].astype(str),
'J_ID':df['J_ID'].astype(str),
'J_title':df['J_title'].astype(str),
'year':df['year'].astype(int),
'court':df['court'].astype(str),
'collateral':df['collateral'].astype(int),
'c_number':df['c_number'].astype(float),
'c_minor_older':df['c_minor_older'].astype(str),
'insurance':df['insurance'].astype(int),
'default_judgement': df['default_judgement'].astype(int),
'c_relative':df['c_relative'].astype(str),
'v_relative':df['v_relative'].astype(str),
'relative':df['relative'].astype(int),
'relative_D0':df['relative_D0'].astype(int),
'relative_D1':df['relative_D1'].astype(int),
'relative_D2':df['relative_D2'].astype(int),
'v_age':df['v_age'].astype(float),
'claimed_amount':df['claimed_amount'].astype(float),
'a_number':df['a_number'].astype(float),
'a_DUI':df['a_DUI'].astype(int),
'v_injury_description':df['v_injury_description'].astype(str),
'v_injury':df['v_injury'].astype(int),
'v_injury_D0':df['v_injury_D0'].astype(int),
'v_injury_D1':df['v_injury_D1'].astype(int),
'v_injury_D2':df['v_injury_D2'].astype(int),
'v_death':df['v_death'].astype(int),
'Article188':df['Article188'].astype(int),
'Article187':df['Article187'].astype(int),
'contributory_negligence':df['contributory_negligence'].astype(float),
'relationship':df['relationship'].astype(str),
'c_occupation':df['c_occupation'].astype(str),
'c_occupation_rank':df['c_occupation_rank'].astype(str),
'c_occupation_rank_D0':df['c_occupation_rank_D0'].astype(int),
'c_occupation_rank_D1':df['c_occupation_rank_D1'].astype(int),
'c_occupation_rank_D3':df['c_occupation_rank_D3'].astype(int),
'c_occupation_rank_D5':df['c_occupation_rank_D5'].astype(int),
'c_occupation_rank_Dna':df['c_occupation_rank_Dna'].astype(int),
'c_monthly_salary':df['c_monthly_salary'].astype(str),
'c_taxable_income':df['c_taxable_income'].astype(str),
'ct_real_estate':df['ct_real_estate'].astype(str),
'c_total_assets':df['c_total_assets'].astype(str),
'c_economic_status':df['c_economic_status'].astype(str),
'c_economic_status_D1':df['c_economic_status_D1'].astype(int),
'c_economic_status_D2':df['c_economic_status_D2'].astype(int),
'c_economic_status_D3':df['c_economic_status_D3'].astype(int),
'c_economic_status_Dna':df['c_economic_status_Dna'].astype(int),
'v_occupation':df['v_occupation'].astype(str),
'v_occupation_rank':df['v_occupation_rank'].astype(str),
'v_occupation_rank_D0':df['v_occupation_rank_D0'].astype(int),
'v_occupation_rank_D1':df['v_occupation_rank_D1'].astype(int),
'v_occupation_rank_D3':df['v_occupation_rank_D3'].astype(int),
'v_occupation_rank_D5':df['v_occupation_rank_D5'].astype(int),
'v_occupation_rank_Dna':df['v_occupation_rank_Dna'].astype(int),
'v_monthly_salary':df['v_monthly_salary'].astype(str),
'v_taxable_income':df['v_taxable_income'].astype(str),
'v_real_estate':df['v_real_estate'].astype(str),
'v_total_assets':df['v_total_assets'].astype(str),
'v_economic_status':df['v_economic_status'].astype(str),
'v_economic_status_D1':df['v_economic_status_D1'].astype(int),
'v_economic_status_D2':df['v_economic_status_D2'].astype(int),
'v_economic_status_D3':df['v_economic_status_D3'].astype(int),
'v_economic_status_Dna':df['v_economic_status_Dna'].astype(int),
'a_occupation':df['a_occupation'].astype(str),
'a_occupation_rank':df['a_occupation_rank'].astype(str),
'a_occupation_rank_D0':df['a_occupation_rank_D0'].astype(int),
'a_occupation_rank_D1':df['a_occupation_rank_D1'].astype(int),
'a_occupation_rank_D3':df['a_occupation_rank_D3'].astype(int),
'a_occupation_rank_D5':df['a_occupation_rank_D5'].astype(int),
'a_occupation_rank_Dna':df['a_occupation_rank_Dna'].astype(int),
'a_driver':df['a_driver'].astype(int),
'a_monthly_salary':df['a_monthly_salary'].astype(str),
'a_taxable_income':df['a_taxable_income'].astype(str),
'a_real_estate':df['a_real_estate'].astype(str),
'a_total_assets':df['a_total_assets'].astype(str),
'a_economic_status':df['a_economic_status'].astype(str),
'a_economic_status_D1':df['a_economic_status_D1'].astype(int),
'a_economic_status_D2':df['a_economic_status_D2'].astype(int),
'a_economic_status_D3':df['a_economic_status_D3'].astype(int),
'a_economic_status_Dna':df['a_economic_status_Dna'].astype(int),
'Article195I_amoumt':df['Article195I_amoumt'].astype(float),
'judgement':df['judgement'].astype(int),
'amoumt':df['amoumt'].astype(float),
'amoumt_negligence':df['amoumt_negligence'].astype(float),
}
df = pd.DataFrame(new_df_schema)
# df.info()
# df.describe()
Back to the Class Page
Video on YT
謝天懷(Hsieh Tian-huai,法研二)、侯怡秀(Hou Yi-hsiu,法研一)、施詠馨(Shih Yong-hsin,國發三)、蘇子陽 (Su Zih-yang,法研一)
依據民法第195條第3項之規定,當不法侵害他人基於父、母、子、女或配偶關係之身份關係而情節重大時,父、母、子、女或配偶(下稱特定近親)雖係受有非財產上之損害,亦得請求賠償相當之金額,即慰撫金,於該條之立法理由已經例示出之事由包含,「未成年子女被人擄略時,父母監護權被侵害所受之精神上痛苦」、「如配偶一方被強姦,他方身份法益被侵害所致精神上痛苦」兩例,但針對其他身體、健康「受傷」的態樣,需要到何種情形才屬於「情節重大」,則需要透過學說以及實務去累積,而自民國88年到現在實務上已經累積相當可觀之判決數量,但是個別法官實際上依據何種因素酌定該慰撫金,尚未有嚴謹的歸納,本文將以此作為核心的爭點意識,將判決系統化分析,將各項變數標示出來,試圖找尋各項變數,何者對於慰撫金有顯著影響。
非財產上的損害賠償,即慰撫金,要求法院就本質上無法被量化的精神上、情感上之痛苦轉換為金錢之債,因此可以想像的是,不管是是否准許慰撫金的請求,還是慰撫金的數額,都具有濃厚的主觀化、難以確定性以及無統一的客觀標準,本次研究將以車禍案件中被害人之身體健康權受損時,特定近親之慰撫金請求為研究客體,初探「地方法院」「民事庭」之「交通事故」案件,所欲討論兩個子議題,其一是在法院在被害人的受到何種傷害下,特定近親之慰撫金請求得以成立;其二是若慰撫金請求成立則究竟加害人、被害人以及請求權人個別之身份、地位、教育程度、收入等因素,是否影響慰撫金之數額,而這些因素何者具有顯著性。
本文閱讀有關於民法第195條3項的文獻,作為本次研究的基石,並作為找尋變數以及推論的基礎。
在陳忠五,(2012年),〈侵害他人身體健康權,被害人父母的慰撫金請求——最高法院100年台上字第992號判決評析〉,肯認身份法益的獨立性,屬於獨立於人格法益外的保護法益,自應本其獨自的構成要件判斷之,與同條第1項之適用無關,因而同一侵害行為,得同時對不同主體構成人格法益與身份法益之侵害,發生不同之分財產上損害賠償請求權;並且分析該身份法益之慰撫金是特定近親,對於被害人之損害所生的不忍不捨,心力交瘁或保去精神折磨等「親情或情感衝擊」,而與該請求權人是否持續照顧、是否對於保護教養造成額外負擔或支出、是否擔任監護人、或是否享有扶養權利,均與「親情或情感利益」乃屬二事,不應等同視之。
在王之穎,(2020年),〈不法侵害被害人身體健康致受傷,其父母子女配偶得否請求慰撫金〉一文中,分析五則最高法院之判決,若被害人因事故所受之傷勢,導致腦部認知或意識受有影響,或腦部認知或意識雖未受影響,但是有需臥床或仰賴她人照護之失能狀態,則多傾向肯認特定近親得依據民法195條3項請求慰撫金,反之,則傾向否定特定近親的慰撫金請求。
本次研究目的在於探究法院在認定是否成立民法195條3項請求慰撫金請求以及其數額,而法院在判決中雖述及「按慰藉金其核給之標準固與財產上損害之計 算不同,然非不可斟酌雙方身分資力與加害程度,及其他各種情形核定相當之數額為核幾標準」,而究竟哪些因素為最顯著之因素,往往不得而知。 本次研究所使用之關鍵字,在搜尋欄輸入「(第195條第3項+第195條第三項)&民法&(交通+車禍)」所涉及的範圍,涵蓋車禍之交通案件且在判決書中引用民法195條第3項之情形。 而在挑選研究樣本時,因為所涉及之判決眾多,難以一一研究,故而將範圍各地方法院共計346個研究樣本,進行分析。
在所研究之判決樣本中,除了參考文獻中關於法院可能考量之意識因素外,也由本組所設想可能對於法院有引響之因素亦將之列為變項,分別有,是否以刑附民、是否有保險、是否屬於一造辯論判決、被害人與請求人之身份關係、被害人年齡、受傷型態、是否有死亡結果發生、加害人有無民法187、188條之適用,以及被害人、請求權人、加害人之職業以及經濟地位情形。
雖本次研究為民法195條第3項應與民法194條做出區分,惟經過查閱相關判決發現,如果交通案件所為之傷勢與最終結果死亡之間欠缺相當因果關係時,則請求權基礎仍為民法195條第3項,因而本文亦將之列為變項之一。
其中關於被害人、請求權人、加害人之職業地位,本是研究參考黃毅志,〈如何精確測量職業地位?「改良版台灣地區新職業聲望與社經地位量表」之建構〉中將各行業就收入以及專業技術作為區分標準,而為職業類別之客觀區分,以具有專業知識之人(例如會計師、律師、教師等)列為職業等級高、而已有固定收入以及事務性工作人員(例如廚師、保安人員)列為等級中、末將非技術或體力工或非固定收入之工作(例如工友、清潔工)列為等級低。
另外就被害人、請求權人、加害人之經濟地位,因為個別法院所探究經濟因素並不相同,有以有無不動產、亦有總資產、或有月薪、或有平均課稅所得、甚至綜合判斷者,而本次研究將經濟地位區分為高、中、低三等,參考「中華民國統計資訊網中」平均每人負債,以107年底為淨值(不含人壽保險及退休基金準備)為新台幣429萬元為總資產之判準,以及「中華民國統計資訊網中」將工業及服務業受僱人員工人數四等分位組分界點之107年總薪資,第一四分位數為34.8萬、第三四分位數為73.1萬而為平均課稅所得判準,且若將之分別將之除以12個月為月薪的判準,綜上,可得之結論如下,若有不動產,且總資產大於新台幣429萬者,經濟地位高;若有不動產但總資產不明或小於新台幣429萬元,經濟地位中;若沒有不動產、總資產不明或小於新台幣429萬者,需進一步判斷月薪以及課稅所得:月薪2.9萬以下,經濟地位低;2.9萬至6.1萬間,經濟地位中;6.1萬以上,經濟地位高。課稅所得34.8萬以下,經濟地位低;34.8萬至73.1萬間,經濟地位中;73.1萬以上,經濟地位高;另外,為處理極端情形包含不動產價值甚低或當事人未報稅之情形,本次研究處理方式如下,如有不動產,惟總資產僅數十萬以內,代表系爭不動產價值低,仍需進一步判斷月薪與課稅所得;課稅所得如僅數萬元以內,可能僅是當事人未報稅,而非其年薪僅數萬元,此時以其月薪判斷之。
# This code will be hidden when the notebook is loaded.
#codebook.head(51).style.set_properties(**{'text-align': 'left'})
#codebook.head(51).style.set_table_styles([ dict(selector='th', props=[('text-align', 'left')] ) ])
left_aligned_df = codebook.head(51).style.set_properties(**{'text-align': 'left'})
display(left_aligned_df)
# from google.colab import files
# uploaded = files.upload()
# import io
# import pandas as pd
# df1 = pd.read_csv(io.BytesIO(uploaded['codebook.csv']))
# print(len(df1))
# df1.head(51)
#@title
##准駁 長條圖
counts = df['judgement'].value_counts().to_dict().copy()
xs = ["1","0"]
ys = list(counts.values())
#print(ys)
plt.bar(xs, ys, color = 'lightblue')
#plt.bar("1", ys[0] , color="lightblue")
#plt.bar("0",ys[1],color="lightblue")
plt.title('195III身體法益與精神慰撫金',fontproperties=myfont)
plt.xlabel('准駁',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
#加上數值
plt.text("1", ys[0]+0.05, ys[0], ha='center', va= 'bottom',fontsize=11)
plt.text("0", ys[1]+0.05, ys[1], ha='center', va= 'bottom',fontsize=11)
#調整Y軸高度
plt.ylim(0,300)
plt.show()
#需要用英文表示
#plt.bar(沒有設定參數 就照預設的)
#df[['judgement']value_counts()]to_dict()
在本圖x軸列「1」表示法院認定原告請求有理由,「0」表示法院認定原告請求無理由。
本圖總體呈現了本研究範圍——「車禍案件所肇致之身分法益受侵害案件」樣本數。而具體件數計算係以請求權人數為單位,蓋同一案件內可能同時有父或母或子女請求。整體而言,法院肯定原告依據民法第195條第3項規定請求精神慰撫金之情形並不罕見。
#@title
counts = df['judgement'].value_counts().to_dict()
xs = list(counts.keys())
ys = list(counts.values())
colors = ['lightblue','pink']
plt.pie(ys, labels=xs, autopct='%1.2f%%', colors=colors)
plt.legend()
plt.title('法院比例',fontproperties=myfont)
plt.show()
法院准許共260筆樣本數,駁回共89筆樣本數,勝率比率為74.5%。
#@title
##親密程度 圓餅圖
#必須先刪除空值
df_pie = df[df['judgement']!= 0 ].reset_index(drop=True).copy()
counts = df_pie['relationship'].value_counts().to_dict()
xs = list(counts.keys())
ys = list(counts.values())
colors = ['lightblue','pink']
plt.pie(ys, labels=xs, autopct='%1.2f%%', colors=colors)
plt.legend()
plt.title('法院實質認定親密關係比例',fontproperties=myfont)
plt.show()
# plt.xlabel('x')
# plt.ylabel('y')
#問題:為什麼plt.xlabel是x不是xs
本圖樣本數僅限於法院准許原告請求之案件,蓋法院認為原告請求無理由者,將不會有後續酌定精神慰撫金金額之問題,也毋庸繼續判斷請求權人與直接被害人之關係緊密程度。而數值「NA」表示未能於判決書上看見法院就請求權人與直接被害人間親密關係判斷之心證過程,「2」則表示法院有於判決書上詳加論述請求權人與直接被害人二人關係親密。
民法第195條第3項之修正理由即言明間接被害人所受之精神上痛苦乃牽繫於親密關係所生之身分法益被侵害,故本研究預設立場法院在酌定金額多寡時應會就「親密關係」進行實質判斷,並進而影響精神慰撫金金額多寡。惟依本圖所呈現,法院在判決書上有公開其就親密關係判斷之心證過程佔比偏低。本研究認為,這不絕對代表法院普遍未就此關鍵因素進行實質認定,可能僅普遍未有揭露於判決書上之習慣。從而,本研究欲探討本一變項對金額多寡影響之深淺,顯然受到限制。
#@title
##裁判金額195三項的裁判金額
df_subz = df[df['amoumt']!= -1 ].reset_index(drop=True).copy()
df_subz['amoumt'] = ((df_subz['amoumt'].astype(int))/10000).astype(int)
bins = np.arange(0, 250, 10)
ys = df_subz['amoumt'].values
plt.title('195III裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.hist(ys, bins, alpha=0.5)
plt.show()
在本圖中,中位數20(萬元)、平均32.158(萬元)。
可以發現統計上在圖型的左側大致呈現常態分佈之趨勢,而於圖表的右側,因為有出現幾筆極端值,本組認為,可能無法產生完整的常態分佈的原因在於,樣本數僅有349件,再扣除請求經駁回者則僅剩餘260件,尚難謂已達大數據之效果。
#@title
##還原金額後裁判圖
df_subz = df[df['amoumt_negligence']!=-1].reset_index(drop=True).copy()
df_subz['amoumt_negligence'] = ((df_subz['amoumt_negligence'].astype(int))/10000).astype(int)
bins = np.arange(0, 250, 10)
ys = df_subz['amoumt_negligence'].values
plt.title('195III裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.hist(ys, bins, alpha=0.5)
plt.show()
中位數40(萬元)、平均46.704(萬元)。
圖之左側大致呈現常態分布之趨勢,而圖之右側,有少數幾筆極端值。
本研究認為,無法產生完整的常態分佈的原因可能在於樣本數僅有349件,再扣除請求經駁回者則僅剩餘260件,難謂已達大數據之效果而使然。
#@title
###195一項的裁判金額
df_subx = df[df['Article195I_amoumt']!= -1 ].reset_index(drop=True).copy()
df_subx['Article195I_amoumt'] = ((df_subx['Article195I_amoumt'].astype(int))/10000).astype(int)
bins = np.arange(0, 650, 20)
ys = df_subx['Article195I_amoumt'].values
plt.title('195I裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.hist(ys, bins, alpha=0.5)
plt.show()
另外,直接被害人依民法195條第1項所得裁判金額,中位數為70(萬元),平均數為91.347(萬元)。
#@title
##還原後裁判金額
df_sub = df[df['amoumt_negligence']!= -1 ].reset_index(drop=True).copy()
df_sub['amoumt_negligence'] = ((df_sub['amoumt_negligence'].astype(int))/10000).astype(int)
# heights, bins = np.histogram(df_sub['amoumt'], bins=5)
bins = np.arange(0, 250, 10)
col0 = df_sub[(df_sub['collateral']==0)]['amoumt_negligence'].values
col1 = df_sub[(df_sub['collateral']==1)]['amoumt_negligence'].values
plt.hist(col1, bins, alpha=0.5, density=False, cumulative = False, label = "collateral")
plt.hist(col0, bins, alpha=0.9, density=False, color = 'pink', cumulative = False, label = "civil only")
plt.legend()
plt.title('刑附民 v 裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.show()
藍色柱狀表示原告係提起刑事訴訟附帶民事訴訟,粉色柱狀表示原告係逕提起民事訴訟請求賠償。
刑附民共212筆樣本,中位數40(萬元)、平均49.505(萬元);單獨提起民事共48筆樣本,中位數20(萬元)、平均34.333(萬元)。
依據刑事訴訟法第504條第2項之規定,以刑附民之形式提起訴訟,原告毋庸繳交民事裁判費。反觀直接提起民事訴訟案件之原告須自行繳交裁判費,顯然後者多背負一定之訴訟成本考量。本研究緣此預設立場,前者在沒有裁判費壓力之下,原告聲明金額可能偏高,並進一步使裁判金額也偏高,故也以「刑附民」作為變項之一。最後,從圖形觀察,似也有這項趨勢,然單純提起民事訴訟案件僅占2成左右,還是必須進一步釐清、分析。
#@title
df_sub = df[df['claimed_amount']!=-1].reset_index(drop=True).copy()
df_sub['claimed_amount'] = ((df_sub['claimed_amount'].astype(int))/10000).astype(int)
# heights, bins = np.histogram(df_sub['amoumt'], bins=5)
bins = np.arange(0, 601, 20)
col0 = df_sub[(df_sub['collateral']==0)]['claimed_amount'].values
col1 = df_sub[(df_sub['collateral']==1)]['claimed_amount'].values
plt.hist(col1, bins, alpha=0.5, density=False, cumulative = False, label = "collateral")
plt.hist(col0, bins, alpha=0.9, density=False, color = 'pink', cumulative = False, label = "civil only")
plt.legend()
plt.title('刑附民 v 聲明金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.show()
藍色柱狀表示原告係提起刑事訴訟附帶民事訴訟,粉色柱狀表示原告係逕提起民事訴訟請求賠償。另有一筆聲明金額2000萬(刑附民)、一筆1000萬(非刑附民)因呈現方式關係未於圖上揭露。
刑附民共276筆樣本,中位數65(萬元)、平均107.134(萬元);非刑附民共73筆樣本,中位數50(萬元)、平均88.164(萬元)。
依前揭理由所設計之刑事附帶民事之變項,可以觀察到,不論有無刑附民,大部分的聲明金額落在300萬以內。
極度偏離行情者則多屬刑附民者,實際關聯也須留待後續進一步釐清、分析。
#@title
##還原金額後
df_sub = df[df['amoumt_negligence']!= -1 ].reset_index(drop=True).copy()
df_sub['amoumt_negligence'] = ((df_sub['amoumt_negligence'].astype(int))/10000).astype(int)
bins = np.arange(0, 250, 10)
inj0 = df_sub[(df_sub['v_injury']==0)]['amoumt_negligence'].values
inj1 = df_sub[(df_sub['v_injury']==1)]['amoumt_negligence'].values
inj2 = df_sub[(df_sub['v_injury']==2)]['amoumt_negligence'].values
plt.xlim(0,250)
plt.hist(inj1, bins, alpha=0.9, density=False, color = 'skyblue', cumulative = False, label = "serious injury")
plt.hist(inj2, bins, alpha=0.9, density=False, color = 'pink', cumulative = False, label = "PVS")
plt.hist(inj0, bins, alpha=0.9, density=False, color = 'purple', cumulative = False, label = "minor injuries")
plt.legend()
plt.title('傷勢 v 裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.show()
藍色柱狀表示重傷(以刑法第10條第4項規定為判準),粉色柱狀表示已呈植物人,紫色柱狀則表示輕傷。
輕傷共41筆樣本,中位數15(萬元)、平均29.634(萬元);重傷共150筆樣本,中位數30(萬元)、平均43.920(萬元);植物人共69筆樣本,中位數50(萬元)、平均62.899(萬元)。
首先,輕傷案件數量與重傷案件(包括植物人案件)數量相比,前者顯然較少。本研究發現,在輕傷案件,法院傾向於認定身分法益因此受侵害尚不該當民法第195條第3項「情節重大」之要件,故而也多將原告請求駁回。
第二,關於傷勢對金額多寡之影響,本研究原預設立場植物人案件相較於一般輕、重傷案件,裁判金額應會顯著較高,蓋此情形直接被害人之父、母、子女在照顧上所需付出之心力更多,精神上承受之壓力也更龐大。然從圖片呈現,二者裁判金額分布無顯著差異,本研究認為應能得出一項結論,即「植物人」非法院裁判較高金額之絕對判準,具體金額多寡仍須視個案情節。
最後,重傷案件(包括植物人案件)較之於輕傷案件,本研究也有相同預設立場。而從圖片呈現,顯見輕傷案件裁判金額普遍偏低,雖存有少數極端值,但不影響本研究認定傷勢情節對於裁判金額之高低有重要影響。
#@title
##還原金額後
df_sub = df[df['amoumt_negligence']!= -1 ].reset_index(drop=True).copy()
df_sub['amoumt_negligence'] = ((df_sub['amoumt_negligence'].astype(int))/10000).astype(int)
bins = np.arange(0, 250, 10)
dui0 = df_sub[(df_sub['a_DUI']==0)]['amoumt_negligence'].values
dui1 = df_sub[(df_sub['a_DUI']==1)]['amoumt_negligence'].values
plt.xlim(0,250)
plt.hist(dui0, bins, alpha=0.5, density=False, cumulative = False, label = "not drunk driving")
plt.hist(dui1, bins, alpha=0.9, density=False, color = 'pink', cumulative = False, label = "drunk driving")
plt.legend()
plt.title('酒駕 v 裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.show()
藍色柱狀表示非酒駕案件;粉色柱狀表示酒駕案件。
本研究在設計變項之初,以「酒駕」作為變項與一般車禍案件比較,是考量酒駕案件侵害社會法益,且社會可非難性較高,是否可能影響法院就最終慰撫金之酌定,而欲分析之。但是本研究採集之349個樣本數中,僅有8件(14個樣本)屬於酒駕案件,因而尚難觀察出兩者之關聯。
#@title
##還原金額後
df_sub = df[df['amoumt_negligence']!= -1 ].reset_index(drop=True).copy()
df_sub['amoumt_negligence'] = ((df_sub['amoumt_negligence'].astype(int))/10000).astype(int)
bins = np.arange(0, 250, 10)
ins0 = df_sub[(df_sub['insurance']==0)]['amoumt_negligence'].values
ins1 = df_sub[(df_sub['insurance']==1)]['amoumt_negligence'].values
plt.hist(ins1, bins, alpha=0.5, density=False, cumulative = False, label = "insurance")
plt.hist(ins0, bins, alpha=0.9, density=False, color = 'pink', cumulative = False, label = "no insurance")
plt.legend()
plt.title('保險 v 裁判金額',fontproperties=myfont)
plt.xlabel('金額(萬)',fontproperties=myfont)
plt.ylabel('件數',fontproperties=myfont)
plt.show()
藍色柱狀表示有投保強制險之案件;粉色柱狀表示無強制險理賠。
有保保險共238筆樣本,中位數40(萬元)、平均46.840(萬元);沒有保保險共22筆樣本,中位數25(萬元)、平均45.227(萬元)。
本研究初期預設立場,若是在加害人有保責任保險時,加害人所負擔之損害賠償責任,因有保險公司負擔之,是否進一步影響到法院酌定之數額,而有較高的趨勢。惟我國設有汽機車之責任險之規定,本研究採集349個判決後,發現無保險之比例確實偏低,僅有43個樣本數。
首先,我們先將「直接被害人195I裁判金額」、「195III裁判金額」、「195III裁判金額_回推過失比例」三個變項的缺項予以清除。
再將上述三者與「被害人傷勢」(為int)、「聲明金額」、「與有過失比例」等數值變項去跑相關矩陣,大致了解兩兩間的相關如下:
#@title
#用None取代-1:Article195I_amoumt、amoumt、amoumt_negligence (v_age、沒相關就不管)
#print(df["v_age"].mean())
#print(df['v_age'][2]) #####超級要注意,index從2開始,讀資料的時候就要注意了
#print(df['v_age'][2]==-1)
#print(range(2,350)) #錯誤語法
#for i in range(2,350):
# if df['v_age'][i]==-1:
# df['v_age'][i]=None #注意:""是str,不能跑回歸
# #print(df['v_age'][i])
df_correlation=df.copy()
for i in range(2,350):
if df_correlation['Article195I_amoumt'][i]==-1:
df_correlation['Article195I_amoumt'][i]=None
for i in range(2,350):
if df_correlation['amoumt'][i]==-1:
df_correlation['amoumt'][i]=None
for i in range(2,350):
if df_correlation['amoumt_negligence'][i]==-1:
df_correlation['amoumt_negligence'][i]=None
#再看一次相關
Correlation = pd.DataFrame(df_correlation[[
'v_injury','claimed_amount','contributory_negligence',
'Article195I_amoumt','amoumt','amoumt_negligence']]).copy()
colormap = plt.cm.viridis
# plt.figure(figsize=(20,16))
# plt.title('all corelations', y=1.05, size=15)
corr = Correlation.astype(float).corr().round(2)
from IPython.display import clear_output
clear_output()
# sns.heatmap(corr,linewidths=0.1,vmax=1.0, square=True, cmap="YlGnBu", linecolor='white', annot=True)
plt.figure(figsize=(20,16))
plt.title('all corelations', y=1.05, size=15)
sns.heatmap(corr,linewidths=0.1,vmax=1.0, square=True, cmap="YlGnBu", linecolor='white', annot=True)
與有過失比例與裁判金額呈負向關係;傷勢、聲明金額、直接被害人195I裁判金額皆與裁判金額呈現正向關係。
#@title
#畫馬賽克圖:'v_injury','judgement'
# from statsmodels.graphics.mosaicplot import mosaic
# from scipy import stats
crosstable=pd.crosstab(df_correlation['v_injury'],df_correlation['judgement']) #改變數
stat, p, dof, expected =stats.chi2_contingency(crosstable, correction=False)
#print("樣本分布情形為:\n",crosstable) #印出分布
#crosstable.info()
print("樣本分布情形為:")
print(" v_injury")
print("judgement \t重1\t輕0\t 植2")
print(" 准許(1) ",crosstable[1][1],"\t",crosstable[1][0],"\t ",crosstable[1][2])
print(" 駁回(0) ",crosstable[0][1],"\t",crosstable[0][0],"\t ",crosstable[0][2])
#print("\n依期望值分布的情形為:\n",expected) #期望值
print("\n依期望值分布的情形為:")
print(" v_injury")
print("judgement \t重1 \t輕0 \t植2")
print(" 准許(1) \t", '%.3f' % expected[1][1]," \t", '%.3f' % expected[0][1]," \t", '%.3f' % expected[2][1])
print(" 駁回(0) \t", '%.3f' % expected[1][0]," \t", '%.3f' % expected[0][0]," \t", '%.3f' % expected[2][0])
# interpret p-value
alpha = 0.05
print("\np value is", '%.3f' % p) # 默認保留3位小數
if p <= alpha:
print(' 結果為:Dependent (reject H0)') #H0是虛無假設
else:
print(' 結果為:Independent (H0 holds true)')
props = {}
props[('1', '1')] = {'color': 'LightCyan'}
props[('1', '0')] = {'color': 'PaleTurquoise'}
props[('0', '1')] = {'color': 'Ivory'}
props[('0', '0')] = {'color': 'LemonChiffon'}
props[('2', '1')] = {'color': 'LavenderBlush'}
props[('2', '0')] = {'color': 'MistyRose'}
mosaic(df_correlation,['v_injury','judgement'], properties=props) #畫馬賽克圖
plt.show()
縱軸為准(1)駁(0),橫軸為重傷(1)、輕傷(0)、植物人(2)
p value小於0.001,有顯著。
輕傷的駁回比例相較於重傷跟植物人,明顯高出許多。
我們想知道什麼因素會影響法院准駁,因此將法院准駁作為依變項,並將一些客觀變項如:刑附民、保險、一造辯論判決等作為自變項納入模型;再依理論認為可能影響法院裁判准駁的變項如:傷勢、直接被害人發生與侵害行為無因果關係的死亡結果、加害人為職業駕駛等作為自變項納入模型。
使用羅吉斯迴歸的統計方法,結果如下:
#@title
###logistic
#import statsmodels.api as sm
#加截距項
df_logistic=df.copy()
df_logistic["intercept"]=1
# defining the dependent and independent variables
X_logistic = df_logistic[[ 'collateral',
'insurance', 'default_judgement',
'v_injury_D1', 'v_injury_D2', 'v_death',
'a_driver',
"intercept"]]
y_logistic = df_logistic['judgement']
# building the model and fitting the data
log_reg = sm.Logit(y_logistic, X_logistic).fit()
# printing the summary table
print(log_reg.summary())
OR=np.exp(log_reg.params)
print("\n各變項odds ratio分別為:")
print(OR)
由上表可知,整體模型有達統計上顯著(LLR p-value<0.001),類R平方(Pseudo R-squ.)為0.2871,即模型可以解釋法院准駁此依變項28.7%的變異。
故進一步檢視個別變項的解釋力,可以發現有達統計上顯著的變項有:保險、傷勢、死亡,即在控制的情形下「重傷比起輕傷」、「植物人比起輕傷」、「有保保險」、「有發生死亡結果」法院更可能准許請求人之195I請求。
原本預設法院可能會因為加害人是職業駕駛而課予其比較高的注意義務,而使責任較一般人容易成立,,不過依照我們的分析結果,並沒有這樣的影響。
依上述可知,僅有保險、傷勢、死亡三個變項有顯著,為了以最少的變項來達成對依變項最大的預測力,將上述模型簡化為三個變項,預測模型如下:
#@title
###logistic預測模型
# defining the dependent and independent variables
X_logistic = df_logistic[[ 'insurance','v_injury_D1', 'v_injury_D2', 'v_death',
"intercept"]]
y_logistic = df_logistic['judgement']
# building the model and fitting the data
log_reg = sm.Logit(y_logistic, X_logistic).fit()
# printing the summary table
print(log_reg.summary())
OR=np.exp(log_reg.params)
print("\n各變項odds ratio分別為:")
print(OR)
由上表可知,整體模型有達統計上顯著(LLR p-value<0.001),類R平方(Pseudo R-squ.)為0.2747,即模型可以解釋法院准駁此依變項27.5%的變異。
個別變項皆有顯著,解釋如同上個模型所述。
我們將樣本的80%拿來訓練,訓練完的決策樹模型如下:
#@title
#logistic
X_logistic = df_logistic[['insurance','v_injury_D1', 'v_injury_D2', 'v_death', "intercept"]].copy()
y_logistic = df_logistic['judgement'].copy()
# 切分訓練與測試資料
train_X, test_X, train_y, test_y = train_test_split(X_logistic, y_logistic, test_size = 0.2)
lm = linear_model.LogisticRegression() #如果是二元y
# 建立分類器
clf = tree.DecisionTreeClassifier(max_depth=3)
clf_logistic = clf.fit(train_X, train_y)
#sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2,
# min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
# random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
# min_impurity_split=None, class_weight=None, presort=False)
text_representation_logistic = tree.export_text(clf_logistic)
#print(text_representation_logistic)
np.sort(y_logistic.unique()).astype(str).tolist()
# DOT data
dot_data = tree.export_graphviz(clf_logistic, out_file=None,
feature_names=X_logistic.columns.tolist(),
class_names=np.sort(y_logistic.unique()).astype(str).tolist(), #也可以手輸入
filled=True)
# Draw graph
graph = graphviz.Source(dot_data, format="png")
graph
fig = plt.figure(figsize=(25,20))
_ = tree.plot_tree(clf_logistic,
feature_names=X_logistic.columns.tolist(),
class_names=np.sort(y_logistic.unique()).astype(str).tolist(),
filled=True)
如上圖,如果是植物人往右走,看有沒有死亡;不過不管有沒有死亡都是法院准許。
如果不是植物人往左走,看有沒有重傷;有重傷法院比較可能會准許,沒有重傷法院比較可能會駁回。 進一步去看有重傷的情形,如果也有保保險,法院准許的可能性較大;沒有重傷的情形,如果有保保險,法院駁回的可能性較小。
說明:解讀決策樹方式如下
1、節點判斷式:如果是ture往左走,如果是false往右走。
2、gini:代表是資料的純度,越接近零代表這批很純。
3、samples:樣本有幾個。
4、value:[0,1]
5、class:這群占大宗的是哪一組,如果class=0,代表這群以0為大宗。
為了檢驗模型預測是否準確,將剩下20%樣本作為測試集,預測結果如下:
#@title
# 預測
test_y_predicted_logistic = clf_logistic.predict(test_X)
print("就測試集,模型的預測結果如下:\n",test_y_predicted_logistic,"\n")
# 標準答案
print("測試集的正確答案如下:\n",test_y.values,"\n")
# 績效
accuracy = metrics.accuracy_score(test_y, test_y_predicted_logistic)
print("accuracy:",accuracy,"\n")
準確率大約8成左右。
在知道什麼因素會影響法院准駁後,我們想進一步知道:在法院准許的情形下,什麼因素會影響法院就195III的裁判金額。
因此我們挑出法院裁定准許的樣本,以法院最終的裁判金額作為依變項,並將一些客觀變項如:刑附民、保險、一造辯論判決等作為自變項納入模型; 再依理論選擇可能影響法院裁判金額的變項如:身分關係、聲明金額、傷勢、死亡、成立188、成立187、與有過失比例、195I的裁判金額,與請求人、被害人、加害人分別的職業等級、經濟狀況等作為自變項納入模型。
我們刪除195I的裁判金額的空值,並刪除195I的裁判金額(取300萬以內,刪掉500萬)、聲明金額(取600萬以內,刪掉1000萬、2000萬)各自的極端值後,剩下197個樣本。將聲明金額、195I的裁判金額、法院最終裁判金額改成以10萬元作為單位,並將聲明金額、195I的裁判金額centering後,使用線性複迴歸分析的統計方法,結果如下:
#必須先刪除空值
##Article195I_amoumt取300萬以下(刪掉500萬)
##裁判金額不刪極端值
##聲明金額取600萬以內(刪掉1000萬、2000萬)'claimed_amount'
df_delNA=df.copy()
for i in range(2,350):
if df_delNA['Article195I_amoumt'][i]==-1:
df_delNA['Article195I_amoumt'][i]=None
elif df_delNA['Article195I_amoumt'][i]>3000000:
df_delNA['Article195I_amoumt'][i]=None
for i in range(2,350):
if df_delNA['amoumt'][i]==-1:
df_delNA['amoumt'][i]=None
for i in range(2,350):
if df_delNA['amoumt_negligence'][i]==-1:
df_delNA['amoumt_negligence'][i]=None
for i in range(2,350):
if df_delNA['claimed_amount'][i]>6000000:
df_delNA['claimed_amount'][i]=None
df_delNA=df_delNA.dropna(axis=0, how='any', inplace=False)
clear_output()
# df_delNA.info()
# df_delNA.head()
#df.info()
df_delNA.describe()
#@title
#線性回歸:amount
df_OLS=df_delNA.copy()
df_OLS["intercept"]=1
#print(df_OLS["intercept"])
#centering,並把數字從元改成十萬元為單位、與有過失比例單位是%
#print(df_OLS['claimed_amount'].mean())
#print(df_OLS['claimed_amount'])
df_OLS['claimed_amount']=(df_OLS['claimed_amount']-df_OLS['claimed_amount'].mean())/100000
df_OLS['Article195I_amoumt']=(df_OLS['Article195I_amoumt']-df_OLS['Article195I_amoumt'].mean())/100000
df_OLS['amoumt']=df_OLS['amoumt']/100000
#print(df_OLS['claimed_amount'])
X_linear = df_OLS[[ 'collateral', 'insurance', 'default_judgement',
'relative_D1', 'relative_D2', 'claimed_amount',
'v_injury_D1', 'v_injury_D2', 'v_death', 'Article188', 'Article187',
'contributory_negligence',
'Article195I_amoumt',
'c_occupation_rank_D0', 'c_occupation_rank_D1', 'c_occupation_rank_D5', 'c_occupation_rank_Dna',
'c_economic_status_D1', 'c_economic_status_D3', 'c_economic_status_Dna',
'v_occupation_rank_D0', 'v_occupation_rank_D1', 'v_occupation_rank_D5', 'v_occupation_rank_Dna',
'v_economic_status_D1', 'v_economic_status_D3', 'v_economic_status_Dna',
'a_occupation_rank_D0', 'a_occupation_rank_D1', 'a_occupation_rank_D5', 'a_occupation_rank_Dna',
'a_economic_status_D1', 'a_economic_status_D3', 'a_economic_status_Dna',
"intercept"]]
y_linear = df_OLS['amoumt']
# from statsmodels.api import OLS
print(OLS(y_linear,X_linear).fit().summary())
由上表可知,整體模型有達統計上顯著(Prob (F-statistic)<0.001),調整後R平方(Adj. R-squared)為0.674,即模型可以解釋法院裁判金額此依變項67.4%的變異。
故進一步檢視個別變項的解釋力,可以發現有達統計上顯著的變項有:聲明金額、傷勢、成立187、與有過失比例、195I裁判金額、被害人職業等級低、被害人職業等級高、加害人經濟狀況高。
但被害人職業等級低相較於中、被害人職業等級高相較於中都是負向關係(法院裁判金額皆比較少),與理論不符,因此可以推論此變項應無意義。
即在控制的情形下, 「重傷比起輕傷」、「植物人比起輕傷」、「成立187」、「加害人經濟狀況高(相較於中)」法院的裁判金額較高, 且聲明金額越高、與有過失比例越低、195I裁判金額越高,法院最終的裁判金額越高。
依上述可知,有達統計上顯著的變項有:聲明金額、傷勢、成立187、與有過失比例、195I裁判金額、加害人經濟狀況高。為了以最少的變項來達成對依變項最大的預測力,將模型簡化為上述變項,預測模型如下:
#@title
#線性回歸:amount
# 顯著的變項有:聲明金額、傷勢、成立187、與有過失比例、195I裁判金額、加害人經濟狀況高。
X_linear = df_OLS[['claimed_amount',
'v_injury_D1', 'v_injury_D2', 'Article187',
'contributory_negligence',
'Article195I_amoumt',
'a_economic_status_D1', 'a_economic_status_D3', 'a_economic_status_Dna',
"intercept"]]
y_linear = df_OLS['amoumt']
print(OLS(y_linear,X_linear).fit().summary())
加害人經濟狀況高變得不顯著,再予以刪除:
#@title
X_linear = df_OLS[['claimed_amount',
'v_injury_D1', 'v_injury_D2', 'Article187',
'contributory_negligence',
'Article195I_amoumt',
"intercept"]]
y_linear = df_OLS['amoumt']
print(OLS(y_linear,X_linear).fit().summary())
成立187變得不顯著,再予以刪除,最後會得到:
#@title
X_linear = df_OLS[['claimed_amount',
'v_injury_D1', 'v_injury_D2',
'contributory_negligence',
'Article195I_amoumt',
"intercept"]]
y_linear = df_OLS['amoumt']
print(OLS(y_linear,X_linear).fit().summary())
由上表可知,整體模型有達統計上顯著(Prob (F-statistic)<0.001),調整後R平方(Adj. R-squared)為 0.597,即模型可以解釋法院裁判金額此依變項59.7%的變異。
其個別變項的解釋為在控制的情形下, 「重傷比起輕傷」、「植物人比起輕傷」法院的裁判金額較高, 且聲明金額越高、與有過失比例越低、195I裁判金額越高,法院最終的裁判金額越高。
由於在閱讀大量判決時,我們發現法院在確認請求權存在,依雙方當事人的教育、職業、經濟等狀況綜合考量後,訂出一個加害人理論上應賠償的金額,再依被害人的與有過失比例減輕,才會得出最終的裁判金額。
因此我們嘗試以法院裁判書中書寫的邏輯順序進行分析: 我們先將法院裁判金額回推如被害人無過失則能獲判的金額作為依變項,再將上述(1)解釋模型(amount)中除了與有過失以外的變項作為自變項分析之,分析結果如下:
#@title
#線性迴歸
#df_delNA.columns
#加截距項
df_OLS=df_delNA.copy()
df_OLS["intercept"]=1
#print(df_OLS["intercept"])
#centering,並把數字從元改成十萬元為單位
#print(df_OLS['claimed_amount'].mean())
#print(df_OLS['claimed_amount'])
df_OLS['claimed_amount']=(df_OLS['claimed_amount']-df_OLS['claimed_amount'].mean())/100000
df_OLS['Article195I_amoumt']=(df_OLS['Article195I_amoumt']-df_OLS['Article195I_amoumt'].mean())/100000
df_OLS['amoumt_negligence']=df_OLS['amoumt_negligence']/100000
#print(df_OLS['claimed_amount'])
X_linear = df_OLS[[ 'collateral', 'insurance', 'default_judgement',
'relative_D1', 'relative_D2', 'claimed_amount',
'v_injury_D1', 'v_injury_D2', 'v_death', 'Article188', 'Article187',
'Article195I_amoumt',
'c_occupation_rank_D0', 'c_occupation_rank_D1', 'c_occupation_rank_D5', 'c_occupation_rank_Dna',
'c_economic_status_D1', 'c_economic_status_D3', 'c_economic_status_Dna',
'v_occupation_rank_D0', 'v_occupation_rank_D1', 'v_occupation_rank_D5', 'v_occupation_rank_Dna',
'v_economic_status_D1', 'v_economic_status_D3', 'v_economic_status_Dna',
'a_occupation_rank_D0', 'a_occupation_rank_D1', 'a_occupation_rank_D5', 'a_occupation_rank_Dna',
'a_economic_status_D1', 'a_economic_status_D3', 'a_economic_status_Dna',
"intercept"]]
y_linear = df_OLS['amoumt_negligence']
print(OLS(y_linear,X_linear).fit().summary())
由上表可知,整體模型有達統計上顯著(Prob (F-statistic)<0.001),調整後R平方(Adj. R-squared)為 0.562,即模型可以解釋法院裁判金額此依變項56.2%的變異。
故進一步檢視個別變項的解釋力,可以發現有達統計上顯著的變項有:刑附民、保險、身分關係、聲明金額、傷勢、成立187、195I裁判金額、被害人職業等級低、加害人經濟狀況高。
即在控制的情形下, 「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「植物人比起輕傷」、「成立187」、「被害人職業等級中比起職業等級低」、「加害人經濟狀況高(相較於中)」法院的裁判金額較高, 且聲明金額越高、195I裁判金額越高,法院最終的裁判金額越高。
相較於模型(1),刑附民、保險、身分關係變得有顯著,重傷相較於輕傷變得沒顯著。
依上述可知,有達統計上顯著的變項有:刑附民、保險、身分關係、聲明金額、傷勢、成立187、195I裁判金額、被害人職業等級低、加害人經濟狀況高。為了以最少的變項來達成對依變項最大的預測力,將模型簡化為上述變項,預測模型如下:
#@title
#線性迴歸_預測
#加截距項
df_OLS_p=df_delNA.copy()
df_OLS_p["intercept"]=1
#print(df_OLS_p["intercept"])
#centering,並把數字從元改成十萬元為單位
#print(df_OLS_p['claimed_amount'].mean())
#print(df_OLS_p['claimed_amount'])
df_OLS_p['claimed_amount']=(df_OLS_p['claimed_amount']-df_OLS_p['claimed_amount'].mean())/100000
df_OLS_p['Article195I_amoumt']=(df_OLS_p['Article195I_amoumt']-df_OLS_p['Article195I_amoumt'].mean())/100000
df_OLS_p['amoumt_negligence']=df_OLS_p['amoumt_negligence']/100000
#print(df_OLS_p['claimed_amount'])
#顯著的變項有:刑附民、保險、身分關係、聲明金額、傷勢、成立187、195I裁判金額、被害人職業等級低、加害人經濟狀況高。
X_linear = df_OLS_p[[ 'collateral','insurance',
'relative_D1', 'relative_D2', 'claimed_amount',
'v_injury_D1', 'v_injury_D2', 'Article187',
'Article195I_amoumt',
'v_occupation_rank_D0', 'v_occupation_rank_D1', 'v_occupation_rank_D5', 'v_occupation_rank_Dna',
'a_economic_status_D1', 'a_economic_status_D3', 'a_economic_status_Dna',
"intercept"]]
y_linear = df_OLS_p['amoumt_negligence']
print(OLS(y_linear,X_linear).fit().summary())
由上表可知,整體模型有達統計上顯著(Prob (F-statistic)<0.001),調整後R平方(Adj. R-squared)為0.505,即模型可以解釋法院裁判金額此依變項50.5%的變異。
加害人經濟狀況高變得不顯著; 被害人職業等級低如模型(1)所述,在模型(1)的時候被害人職業等級不管高低相較於中都是負向關係,可以推論此變項應並無意義,在此模型我們也決定將其予以刪除。
再繼續精簡模型後結果如下:
#@title
X_linear = df_OLS_p[[ 'collateral','insurance',
'relative_D1', 'relative_D2', 'claimed_amount',
'v_injury_D1', 'v_injury_D2', 'Article187',
'Article195I_amoumt',
"intercept"]]
y_linear = df_OLS_p['amoumt_negligence']
print(OLS(y_linear,X_linear).fit().summary())
由上表可知,整體模型有達統計上顯著(Prob (F-statistic)<0.001),調整後R平方(Adj. R-squared)為 0.495,即模型可以解釋法院裁判金額此依變項49.5%的變異。
故進一步檢視個別變項的解釋力可以知道, 在控制的情形下, 「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「重傷比起輕傷」、「植物人比起輕傷」、「成立187」法院的裁判金額較高, 且聲明金額越高、195I裁判金額越高,法院最終的裁判金額越高。
「重傷比起輕傷」又變得顯著。
比模型(2)多了「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「成立187」。
依研究結果可以得知,在控制的情形下「重傷比起輕傷」、「植物人比起輕傷」、「有保保險」、「有發生死亡結果」法院更可能准許請求人之195I請求。
比起輕傷,重傷、植物人更可能成立195III,較無疑義; 針對植物人之情形,對應王之穎,(2020年),〈不法侵害被害人身體健康致受傷,其父母子女配偶得否請求慰撫金〉一文中所論述,針對意識受傷類型之植物人,法院多傾向肯認195條3項的請求,亦得驗證之。
雙方當事人有保保險的的情形,法院比較可能准許的原因,我們推測可能是因為有保險,使請求權成立能兼顧被害人的損害受到保險金給付的填補,同時加害人的賠償負擔亦不致過重。
而被害人發生與侵權行為無因果關係的死亡結果,法院比較可能准許的原因,我們推測有可能是因為此種情形被害人的傷勢本來就較重,才會引起併發症而肇致死亡結果發生(我們並未進一步證實),或是因為被害人已死亡而不得請求195I的慰撫金或其他財產上損害,因此法院可能較寬認195III的成立。
原本預設法院可能會因為加害人是職業駕駛而課予其比較高的注意義務,而使責任較一般人容易成立,不過分析後發現並未有影響。
從預測模型而來的決策樹模型看來,雖然結點使用了三個變項來判斷,分別是傷勢、保險、死亡結果。
是植物人就有高機率法院會准許;不是植物人,而是重傷的情形,法院也較可能准許;而如果只是輕傷,法院較可能不准許。而輕傷跟重傷的情況,分別在有保保險下比較可能准許。
至於死亡結果,由於駁回樣本只有1個,因此看不太出來其是否為有效的分類。
依研究結果可以得知,在控制的情形下, 「重傷比起輕傷」、「植物人比起輕傷」、「成立187」、「加害人經濟狀況高(相較於中)」法院的裁判金額較高, 且聲明金額越高、與有過失比例越低、195I裁判金額越高,法院最終的裁判金額越高。
依據各變項詳細論述如下:
保險、無因果關係死亡並未顯著,因此保險、死亡在是否成立195III的法院判斷上有所影響,卻並未影響法院裁判金額。
無因果關係死亡並未影響法院裁判金額,因此似乎可以間接認為上述就為何影響法院准駁的推論一(有可能是因為此種情形被害人的傷勢可能較重)並不可採,因為如果被害人傷勢重,發生的損害較大,理論上應該也會進一步影響法院裁判金額。
我們在閱讀大量裁判時,如果有不同身分別的請求人在同一個裁判中請求195III慰撫金,法院通常會同勝同敗,但會依請求人跟被害人的不同身分關係而有不同的裁判金額,通常請求人是配偶的裁判金額會比請求人是子女的來得高。
然而卻沒有在研究結果看到此關係,我們推論可能是因為的分析方法並未分階層(裁判為第一階、裁判中得請求人為第二階),而是全部樣本在同一階層作分析,因此受到如傷勢等其他變項的影響後,就看不出身分關係造成的影響。
在閱讀大量裁判時,我們也發現,許多法院雖然會在裁判書中羅列各請求人的教育、職業、經濟等狀況,然而最終往往相同身分別的請求人都會有相同的裁判金額。我們的研究結果也與此相符,請求人的職業、經濟變項皆未有影響。
至於「被害人職業等級」,不管被害人職業等級低還是高都跟職業等級中呈負向關係,應是不重要的變項;「加害人經濟狀況高(相較於中)」法院裁判金額較高,符合理論依據。
而聲明金額越高,法院最終的裁判金額越高。惟我們推論可能只是因為通常較嚴重的傷勢,親屬都會要求較高的慰撫金,因此聲明金額與法院最終裁判金額未必有因果關係。
我們回推與有過失後的裁判金額作為依變項,並將理論上可能影響依變項的變相做為自變項納入得出模型(3)的研究結果,可以得知在控制的情形下, 「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「植物人比起輕傷」、「成立187」、「被害人職業等級中比起職業等級低」、「加害人經濟狀況高(相較於中)」法院的裁判金額較高, 且聲明金額越高、195I裁判金額越高,法院最終的裁判金額越高。
相較於模型(1),刑附民、保險、身分關係變得有顯著,重傷相較於輕傷變得沒顯著。
而為了預測,刪除掉沒有顯著的變項後,得出模型(4)的研究結果,即在控制的情形下, 「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「重傷比起輕傷」、「植物人比起輕傷」、「成立187」法院的裁判金額較高, 且聲明金額越高、195I裁判金額越高,法院最終的裁判金額越高。
相較於模型(3),「重傷比起輕傷」有顯著。
且比起模型(2),多了「刑附民」、「沒有保保險」、「請求人是父母相較於請求人是子女」、「成立187」。
我們不太確定為什麼回推與有過失後,刑附民、保險、身分關係、成立187的影響會顯現。 然而有保保險法院反而判的較低,也與我們預設的不符。
#隱藏code
from IPython.display import HTML
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>''')