Total Pageviews

2020/10/05

[閱讀筆記] Misbehaving: The Making of Behavioral Economics (不當行為, 1/4)

  1. 引領 Thaler 進入行為經濟學領域的前輩是《快思慢想》的作者丹尼爾 · 康納曼,並於 2013 年獲得諾貝爾經濟學獎,Thaler 代表著作還有《贏家的詛咒》、《推力》等。

  2. 在暴風雪的夜晚,為什麼拿到免費票的人會放棄長途開車去看球賽,但是自己花錢買票的人卻執意冒險開車出門,只為了把球票的錢「賺回來」?經濟學不是教導我們,花出去的錢是潑出去的水,是「沈沒成本」,所以如果天候不佳,無論是贈票或花錢買票,都不該出門

  3. 開派對的時候,大夥怕先吃零食導致主餐吃不下,所以把零食收起來。經濟學原理說,人的選擇越多越好,因為多的選擇你不喜歡或認為不該選,永遠可以不要選。不過現實卻是,我們常缺乏意志力、吃得太多、錢存得太少、永遠明天再開始運動

  4. 行為經濟學可以幫你建立一套看世界的新觀點,帶你掌握人性、善用人性、做出聰明的決定、讓社會更美好。

  5. 經濟理論的核心前提,就是人類會根據最大利益來做選擇。但這個前提是有問題的:

原因

說明

① 一般人遇到最佳化問題往往難以自行解決

  • 一般人走進一間具備相當規模的超市,裡面往往擁有數百萬種符合一般家庭預算的商品組合,他們真的會選中經濟效益最佳的組合?

② 人無法做出公正客觀的選擇

  • 人類常會過度自信,充滿誤判與偏見

③ 最佳化模式常忽略許多因素

  • 理性的人不會期待在每年情人節、生日或結婚紀念日收到禮物,這些日子跟其他日子究竟有什麼差別?

  • 送現金讓受贈者自行選購效益最佳的商品是最好的選擇,但是就算你的配偶是經濟學家,送現金可能也不是個好主意


  1. 缺乏被識別和被認同,就缺乏打動情感的影響力。我們幾乎不會純粹因為缺錢,就放手讓任何被識別和被認同的生命撒手人寰,然而每天卻有數千名未被識別和認同的生命,只因為缺乏蚊帳、疫苗或乾淨水源這些簡單的東西而死亡。

  2. 機會成本是,你若放棄從事這項活動所要付出的代價,例如我決定出門健行,而不是待在家看球賽,健行的機會成本就是放棄看球賽的樂趣。

  3. 稟賦效應 (Endowment Effect):你所擁有的東西就是個人稟賦的一部分,常人對於自身已擁有的東西,會比可能擁有的東西(即有機會取得卻尚未擁有的東西),要來得更加看重。簡單來說,就是當你擁有某樣東西後,你對這樣東西的評價會變高。就好比,「丟了一百塊的痛苦比撿到一百塊的幸福更強烈」,以上這些都是稟賦效應的實際應用。

  4. 「後見之明偏誤」即我們會在事實發生之後,以為自己早就知道結果將如何,例如原本默默無聞的非裔美籍參議員歐巴馬擊敗呼聲甚高的希拉蕊,贏得民主黨總統候選人提名之後,許多人以為自己早就預料到這結果,但是他們其實沒有,只是記錯罷了。後見之明偏誤特別糟糕的一點是,我們都在別人身上看到這種偏誤,卻獨獨看不見自己的。

  5. 財富的「效用」會在他們變得更富有時呈現增長,不過增長幅度將逐漸遞減,這個原則被稱為「敏感度遞減」。財富越是增加,增加的部分所能創造的影響就越來越小。對一個農夫來說,10萬美金的意外之財可能會改必他的醫生;但是這筆錢根本入不了 Bill Gates 的眼。

  1. 效用函數隱含著「風險規避」的概念,第一筆 1000 美金的效用 > 第二筆 1000 美金的效用,依此類推。若你的財富是 10 萬美金,假設你有 100% 機率得到 1000 美金,以及只有 50% 機率獲得 2000 美金之間做選擇,大部分的人都會選擇前者,因為人們不願意為了得到 2000 美元,冒著失去第一筆 1000 美金的風險。

  2. 常人思考生活是透過相對變化,而非絕對水平高低。所謂變化可以是與現況相比,也可以與原先預期相比。無論是哪一種形式的變化,都可以讓我們歡天喜地或愁雲慘霧。例如,Jessy 突然在年終時得到預期外的 5000 美元的分紅,他會去計算多了這筆錢之後,這輩子的才會有多少些微程度的改變嗎?不會!Jessy 比較有可能的反應是:「哇,多了 5000 美元!」

  3. 用選舉制度來解釋「相對」與「絕對」的差別。「相對多數制」指候選人只要獲得相對較多的選票即當選,其優點為手續簡單、計算方式明瞭,但由於不用獲得過半的票數比例也能當選,門檻較低,易產生代表性不足的問題;「絕對多數制」(兩輪投票制)指當選者的得票必須過半,否則將取票數領先的前兩位,進行第二輪的投票,其優點為過半數才當選,確保代表性,缺點是易浪費人力、時間和資源。

  4. 價值函數:增益的部分,表現出敏感度遞減的現象;損失的部分,也表現出敏感度遞減的現象,損失 $10 與 $20 間的差異,遠高過損失 $1300 與 $1310 間的差異。但是,人們痛很損失的心理,遠大於獲得。常人對於獲得和損失都呈現敏感度遞減,這項事實還有一層意義。面對獲得,我們抱持風險規避態度;面對損失,卻抱持風險偏好態度

測試問題

選項

結果

假設你比今天多擁有 $300,你會從下列兩者中選擇哪一個?

① 100% 獲得 $100

獲得第二筆的滿足,已不若第一筆滿足,故抱持風險趨避的態度

72%

② 50% 獲得 $200,以及 50% 沒有損失

28%

假設你比今天多擁有 $500,你會從下列兩者中選擇哪一個?

① 100% 損失 $100

36%

② 50% 損失 $200,以及 50% 沒有損失

損失第二筆的痛苦,已不若第一筆的痛苦,故已準備好冒著損失更多的風險來撈本

64%


  1. 價值函數兩條曲線中,損失函數線型顯然比增益函數來的陡峭,下降速度超過增益函數的上升速度。大致來說,損失帶來的痛苦,是獲得所帶來快樂程度的兩倍。此結果呼應到稟賦效應 (Endowment Effect),當你擁有某樣東西後,你對這樣東西的評價會變高。就好比,「丟了一百塊的痛苦比撿到一百塊的幸福更強烈」。在損失與獲得的等量條件下,人類對損失比獲得更加敏感的現實,就叫做「損失規避」

  2. 這種「多一個」的概念,在經濟學裡稱為「邊際」(marginal),像是你要多買一件襯衫、多蓋一間工廠,隱約都會用邊際來思考,只要這個選擇「得到的額外好處」大於「追加付出的成本」,通常你就會決定要「多一個」。額外得到的好處,稱做「邊際效益」(marginal benefit);追加付出的成本,叫做「邊際成本」(marginal cost),而邊際效益扣除邊際成本,就代表每增加一單位產品,你能得到的「邊際利潤」(marginal profit)。對廠商而言,只要有邊際利潤,就應該繼續做產品來賣,直到你無法多賺進任何一點利潤(邊際利潤等於零)才停止。但是這是實驗室裡面的經濟學,在真實的商場上,並不是這樣在考慮事情,業者不認為薪資變化會在多大程度上影響聘雇或產量,反而盡可能銷售更多產品,並根據需求水準來決定增聘或減聘員工。( https://bit.ly/2w7hm8d )

  3. 心理學家告訴我們,若要從經驗中學習,有兩個要素不可或缺:「

  4. 練習」與「即時回饋」。當這兩項條件存在時,無論是學騎腳踏車或學開車,即便過程中可能發生一些事故,我們最終總是能夠學會。

  5. 一個沒有足夠能力為自己的退休儲蓄挑選優良投資組合的人,怎麼可能會有能去自行尋找理財顧問、房貸經紀人或不動產經紀人!

  6. 所有的經濟決策都是透過「機會成本」這個透鏡來判定,例如,今晚要看電影與吃晚餐的成本,不只看帳面上的財務支出,也要看這些時間與金錢若另做他途會有多少效用。

2020/10/04

On Bullshit

  1. On Bullshit 本書目的:

  1. Max Black 在《鬼扯連篇》(The Prevalence of Humbug) 一書裡,提到鬼扯 (Humbug) 的同義字,包括廢話 (balderdash)、噱頭 (claptrap)、空話 (hokum)、蠢話 (drivel)、胡說八道 (buncombe)、鬼話連篇 (imposture)、大肆吹噓 (quackery) 等。Max Black 有針對鬼扯 (Humbug) 提出正式的定義:欺騙性的誤導用語,但卻不到說謊的程度,尤其是藉著虛偽的語詞或作為,不正確地表述自己的思想、感覺或態度

  2. 鬼扯 (Humbug) 具有「欺騙的意圖」,行為特性與說謊相似,但不等於說講話。鬼扯的成立條件是:陳述事情時,抱持「騙人的意圖」。說謊是講假話騙人,鬼扯則是想騙人,有可能說真話,也有可能說假話

說謊 (lie) 

鬼扯 (Humbug)

有騙人的意圖

說假話騙人

有可能說真話,也有可能說假話


  1. 鬼扯的主要目的,正是要讓聽眾對於表述者當時的想法產生錯誤印象;製造錯誤印象 (false impression),就是鬼扯的主要目的與著眼點

  2. shit 這個字,就如同它字面上的意意。排泄物通常沒有經過設計或精練,就只是被噴出的、毫無營養的排泄物。其可能有一致性的形狀或沒有,但可以肯定的是,它絕對不是刻意做出來的。於是,很費心製造出來的 bullshit,在想法上級出現了某些內在張力。

  3. 說謊 (lie) vs. 放屁 (bullshit)

說謊 (lie) 

放屁 (bullshit)

  • 有意識的犯錯行為

  • 一般易受到嚴重的法律或道德譴責

  • 知道事實,故意誤導聽眾,如詐欺犯

  • 有目的、但無意識的犯錯行為

  • 因為無意,所以一般較受人體諒

  • 不在意事實,只在意是否符合他的行為目的,如政客的主張或支票


  1. 放屁並不是說謊。一個企圖藉著放屁蒙混的人,他的焦點是全景的,可以好整以暇的假造整個脈絡。放屁比較像藝術,它比說謊更開闊、更獨立、有更多機會可以用來即興表演、渲染和玩弄想像。

  2. 除非一個人認為自己知道真相,否則這個人不可能說謊,但是放屁的創作根本不需要做這種確認。因此,說謊就是在回應真相,他某種程度上面還是尊重真相。

  3. 放屁是一種普及的社會現象,少見多怪。成功兌現的屁,叫實現目標;無法轉換的放屁,則成為謊言

  4. 當一個誠實的人說話,他只說自己相信為真的事情;至於說謊者,所說的就是自知為假的陳述。然而對於放屁者來說,上述這些都不存在:他既不在真實的這一邊,也不在造假的這一邊。說謊的人和誠實的人都把目光擺在事實上頭,放屁的人則根本不在意事實,除非這麼做能符合他的利益,讓他不受懲罰就逃過自己說過的話。他不在乎自己說的話是否真確的描述事實,他只挑選或編造,以符合他的目的

說謊的人

誠實的人

放屁的人

在意事實

不在意事實

不難捉摸,持相反的意見就對了

不用瞎猜

真真假假,有理無理,把人的腦袋搞得團團轉,最令人頭痛


  1. 陳述的人缺乏一種對事實的關切,認為事實真想如何都沒有差別的態度,就是放屁的本質

  1. 「Bull」是指「沒有目標的任務」,這種任務源自於他們沒有其他事情可以發揮,藉以顯露組織最主要企圖或組織需要他們的目的合理化。例如過度的整潔和官僚主義,這對軍人或政府官吏的真正目標皆無所助益,然而這都是那些負責讓他們發揮目的之機關或官員所制定的。

  2. 「沒必要的例行任務或儀式」,乃是強加於人的活動,與動機的正當性並無關聯,它和人們在打屁大會所說的話一樣,與他們固有的信念也無關;而放屁也同樣和真假沒有關聯。

  3. 當我們稱一個人在講空話 (hot air),指的是他嘴上所噴出的只不過是股熱風,內容空洞、沒有實質內容,也就是說,他使用語言不是為了要達成內容該達成的目的。

  4. 說謊 vs 呼弄

說謊

呼弄

皆為錯誤表述或欺騙的型態

刻意去傳播虛假

要傳達某種虛假,強調「以假亂真」(fakery),與 bullshit 相仿


  1. 放屁的本質不在於它的假,而在於它是「騙人的東西」(phony)。假冒的東西之所以有問題,不在於它像什麼,而在於它是怎麼做出來的。這與放屁有相似且基本的面相,即放屁所表現的是不理會真實,不需要是假。放屁的人是在假冒事情,但這並不意味著他就必然得做錯事。

  2. 和說謊相比,放屁更容易逃避人們的指責。人們對放棄的容忍度大過說謊,這可能是我們比較不把放屁視為一種人身冒犯。我們可能會盡量設法和放屁的行徑保持距離,但反應可能僅是不耐煩或生氣地聳聳肩,而不會像說爽常常激起的遭到冒犯的感覺,以及因此為之震怒。

  1. 說謊 (lie) vs. 放屁 (bullshit)

說謊 (lie) 

放屁 (bullshit)

必須關心真假,才能創作出有效的謊言

擁有很大的自由度,不管真假,不受限於事實

須仰賴大量的分析與深思熟慮

更開闊、獨立,有更多機會即興表現、渲染和玩弄想像

比較偏向技術,而非藝術

比較偏向藝術,而非技術

一定是假話,企圖引導我們偏離對事實的理解

不必然是假話,甚至沒有騙人的意圖,只是為了達成它的目的而運用某種方式錯誤表述

在意事實,編織自知為假的陳述

不在意事實,除非這麼做能符合他的利益,毫不在乎自己所說的話是否真確的描述事實,只挑選或編造,以符合自身目的


  1. 毫無節制的放屁,也就是做任何評斷時只想著這場合適合說什麼,任何真假都毫不在意,於是,一個人關心事實的「正常習慣」會越來越差,甚至消失。

  2. 有人說謊話,有人說真話。一端視被「真」的權威所指引;另一端則是否定「真」的權威,還拒絕「真」的要求,兩端都是各自根據他們對「真」的理解做回應。放屁者完全忽視兩者的要求,這種人不像說謊者拒絕「真」的權威、反對真實,因為他根本就不在意真實。就影響效力而言,放屁者比說謊者更嚴重,是「真實」的更大敵人

  3. 當情況需要人們去講他不知道在講什麼的時候,放屁即不可避免。因此,當一個人有責任或機會,針對某些話題去發表超出他對該話題相關事實的知識時,放屁行徑即被刺激而出。當今人們普遍相信,作為民主社會之公民,有責任要對所有事或至少有關國家的任何事都表示意見,在這種強況下,許多與屁話密切相關的案例就會出現。

  4. 當今放屁現在氾濫,還有更深層的原因,那就是目前各類懷疑主義大勝,它還否認我們對一件客觀實體的掌握途徑是足以信賴的,因而任何我們不可能知道何者為真。這種「反真相」逐漸蛀蝕我們對公正無私努力來解決熟真孰假的信心,也蛀蝕我們對客觀調查來瞭解他人觀點的信心。當人們從致力追求「正確無誤」的理想信條上退縮,轉而追求所謂「誠意」這種替代性想像。從「忠於事實」變成「忠於自己」,當大家以「誠意」為名,相信自己才是最後標準時,所謂的誠意也就成了放屁。

2020/10/03

[Oracle] months_between


若我想知道兩個日期間差幾個月,可運用 months_between 此內建 function 來完成,若要做四捨五入,可加上 round function;若要做無條件進位,可加上 ceil function。

範例如下:
select months_between(to_date('20200901', 'YYYYMMDD'), TO_DATE('20200722', 'YYYYMMDD'))        as VAL1,
       round(months_between(to_date('20200901', 'YYYYMMDD'), TO_DATE('20200722', 'YYYYMMDD'))) as VAL2,
       ceil(months_between(to_date('20200901', 'YYYYMMDD'), TO_DATE('20200722', 'YYYYMMDD')))  as VAL3
from dual;

執行結果如下:









Reference

2020/10/02

[Oracle] [Stored Procedure] Cursor

Assume I have a table which name Product, the data look like:
SELECT ORDER_DATE, PRODUCT_ID, QTY
FROM PRODUCT
WHERE PRODUCT_ID = '1000'
ORDER BY ORDER_DATE;









If I would like to find data in stored procedure, and print data value for each row. We can make good use of CURSOR to fulfill this requirement:
CREATE OR REPLACE PACKAGE PG_PRODUCT AS
    PROCEDURE SP_PRC_GET_PRODUCT(i_product_id IN VARCHAR2);
END PG_PRODUCT;
/
CREATE OR REPLACE PACKAGE BODY PG_PRODUCT AS
    PROCEDURE SP_PRC_GET_PRODUCT(i_product_id IN VARCHAR2)
    AS
        CURSOR cur_product IS SELECT ORDER_DATE, PRODUCT_ID, QTY
                              FROM PRODUCT
                              WHERE PRODUCT_ID = i_product_id
                              ORDER BY ORDER_DATE;
        cur_product_rec cur_product%rowtype;
    BEGIN
        dbms_output.put_line('i_product_id = ' || i_product_id);
        FOR cur_product_rec IN cur_product
            LOOP
                dbms_output.put_line('ORDER_DATE = ' || cur_product_rec.ORDER_DATE ||
                                     ', PRODUCT_ID = ' || cur_product_rec.PRODUCT_ID ||
                                     ', QTY = ' || cur_product_rec.QTY);
            END LOOP;

    END SP_PRC_GET_PRODUCT;
END PG_PRODUCT;
/

Stored procedure execution log:











2020/10/01

[Oracle] ROW_NUMBER Function

Assume I have a table which name Product, the data looks like:
SELECT ORDER_DATE,
       PRODUCT_ID,
       QTY
FROM PRODUCT
WHERE ORDER_DATE = '20200501'
ORDER BY ORDER_DATE, PRODUCT_ID;









We can make good use of row_number function to retrieve its row number:
SELECT ORDER_DATE,
       PRODUCT_ID,
       QTY,
       row_number() over
           (ORDER BY ORDER_DATE, PRODUCT_ID) AS ROW_NUMBER
FROM PRODUCT
WHERE ORDER_DATE = '20200501'
ORDER BY ORDER_DATE, PRODUCT_ID;









If we would like get the second record, the SQL statement looks like:
SELECT ORDER_DATE,
       PRODUCT_ID,
       QTY,
       ROW_NUMBER
FROM (
         SELECT ORDER_DATE,
                PRODUCT_ID,
                QTY,
                row_number() over
                    (ORDER BY ORDER_DATE, PRODUCT_ID) AS ROW_NUMBER
         FROM PRODUCT
         WHERE ORDER_DATE = '20200501'
         ORDER BY ORDER_DATE, PRODUCT_ID
     )
WHERE ROW_NUMBER = 2;







Reference