เพิ่มศักยภาพการปรับราคาสินค้าให้เหมาะสมด้วย Price Elasticity Model บน Python

เพิ่มศักยภาพการปรับราคาสินค้าให้เหมาะสมด้วย Price Elasticity Model บน Python

Price Elasticity หรือ “ความยืดหยุ่นของราคา” เป็นแนวคิดในเศรษฐศาสตร์ที่วัดว่าปริมาณความต้องการของสินค้า/บริการ (demand) หรือปริมาณสินค้า/บริการที่เสนอขาย (supply) มีการเปลี่ยนแปลงไปอย่างไรบ้าง เมื่อมีการเปลี่ยนแปลงราคาของสินค้าหรือบริการนั้นๆ ซึ่งความยุ่นของราคามีสองประเภทหลักๆ ค่ะ คือ ความยืดหยุ่นของราคาต่อความต้องการ (Price Elasticity of Demand, PED) และความยืดหยุ่นของราคาต่อปริมาณที่เสนอ (Price Elasticity of Supply, PES)

ซึ่งสิ่งนี้เป็นสิ่งจำเป็นที่เราจะต้องทำการพิจารณาเพื่อตั้งราคาให้เหมาะสมกับภาวะของตลาดที่เปลี่ยนแปลงไปสำหรับสินค้าแต่ละประเภท,, คำถามก็คือแล้วเราจะทราบได้อย่างไรล่ะว่าแล้วเราจะใช้หลักการอะไร หรือ Tools อะไรมาช่วยในการวิเคราะห์หาค่าที่เหมาะสมที่สุด หรือเรียกอีกอย่างหนึ่งว่าเป็นการทำ Optimization นั่นเองค่ะ🧐💰

ดังนั้นสำหรับบทความนี้นิกพาทุกท่านไปทำความรู้จักกับ Price Elasticity Model เพื่อใช้พิจารณา ความยืดหยุ่นของราคาต่อความต้องการ โดยโมเดลนี้เป็นเครื่องมือทางคณิตศาสตร์ที่ใช้ในการกำหนดระดับที่ความต้องการต่อสินค้าหรือบริการ ว่าสินค้าหรือบริการนั้นตอบสนองต่อการเปลี่ยนแปลงของราคามากน้อยขนาดไหน (อธิบายเทอม Maths ได้ว่า: เป็นการวัดผลการเปลี่ยนแปลงเปอร์เซ็นต์ของปริมาณสินค้าหรือบริการที่ต้องการ เมื่อเทียบกับการเปลี่ยนแปลงเปอร์เซ็นต์ของราคาที่สอดคล้องกัน) โดยความยืดหยุ่นของราคานี้จะสะท้อนถึงค่าที่เป็นตัวเลขแสดงการตอบสนองของปริมาณที่ต้องการต่อการเปลี่ยนแปลงของราคา

ตามสมการนี้ค่ะ =>>

การปรับราคาสินค้าให้เหมาะสมด้วย Price Elasticity Model บน Python
Price Elasticity of Demand and Supply

เมื่อ Q คือปริมาณความต้องการ (Demand) ของสินค้าหรือบริการ และ  ΔQ คือปริมาณที่เปลี่ยนแปลงไป ส่วน P คือราคาของสินค้า และ Δ P ราคาที่เปลี่ยนแปลงไปค่ะ

โดยเป็น PED วัดว่าปริมาณที่ต้องการของสินค้าหรือบริการเปลี่ยนแปลงแค่ไหนเมื่อราคาเปลี่ยนแปลง ซึ่งหากค่า PED มากกว่า 1 หมายความว่าความต้องการเปลี่ยนแปลงมากกว่าราคา (ความยืดหยุ่นสูง) แต่ถ้าค่าน้อยกว่า 1 หมายความว่าความต้องการเปลี่ยนแปลงน้อยกว่าราคา (ความยืดหยุ่นต่ำ) และถ้าค่าเท่ากับ 1 นั่นคือความต้องการเปลี่ยนแปลงแปรผันตรงกับราคาค่ะ

และ PES เป็นการวัดว่าปริมาณที่เสนอของสินค้าหรือบริการเปลี่ยนแปลงมากแค่ไหนเมื่อราคาเปลี่ยนแปลงค่ะ โดยที่หากเราพบว่าค่า PES มากกว่า 1 นั่นคือปริมาณที่เสนอเปลี่ยนแปลงมากกว่าราคา หรือมีความยืดหยุ่นสูง แต่ถ้าค่าน้อยกว่า 1 นั่นคือการที่ปริมาณที่เสนอมีการเปลี่ยนแปลงน้อยกว่าราคา หรือความยืดหยุ่นต่ำ และถ้าคำนวณมาแล้วมีค่าเท่ากับ 1 หมายความว่ ปริมาณที่เสนอเปลี่ยนแปลงเป็นสัดส่วนกับราคาค่ะ

=>> เป็นอย่างไรบ้างค่ะเพื่อนจากนิยามอ่านแล้วมีงงๆ กันบ้างไหมคะ 😄😆

แต่ไม่ต้องเป็นห่วงค่ะ เพราะในบทความนี้นิกจะพาทุกท่านใช้การ Coding แบบง่ายๆ บน https://colab.research.google.com/ ด้วยภาษา Python เพื่อทำ Optimization หรือหาค่าที่เหมาะสมที่สุดออกมาค่ะ^^

เริ่มจากทุกท่านสามารถเข้าไป Download ข้อมูลที่จะเอามาใช้ทำ Price Elasticity Model ในบทความนี้ได้ที่: https://github.com/Nick-Panaya/price_elasticity_data/

เมื่อ Download ข้อมูลมาแล้วก็ให้เพื่อนๆ อัพโหลดไฟล์ .csv มาที่ Google Colab ที่เราเปิดไว้ด้านบน และสำหรับนิกจะลอง Plot Scatter Graph ออกมาเพื่อดูลักษณะการกระจายตัวของข้อมูลก่อนด้วย Code ด้านล่างนี้ค่ะ

import pandas as pd
df = pd.read_csv(‘/content/price_data.csv’)
df.plot(x=”Quantity”, y=”Price”,kind=”scatter”)

การปรับราคาสินค้าให้เหมาะสมด้วย Price Elasticity Model บน Python
กราฟแสดงความสัมพันธ์ระหว่างราคากับปริมาณ

หลังจากนั้นเราจะใช้โค้ดเจ้าประจำในการให้โปรแกรมอธิบายค่าต่างๆ ออกมาให้เราอย่างเช่น ปริมาณของข้อมูล (count), ค่าเฉลี่ยเลขคณิต (mean), ค่าส่วนเบี่ยงเบนมาตรฐาน (std), ค่าสูงสุด/ต่ำสุด (Min/Max) และค่าเปอร์เซ็นต์ไทล์ที่ 25,50,75 ด้วยโค้ดง่ายๆ ด้านล่างนี้ค่ะ

df.describe()

หลังจากเราทราบข้อมูลคร่าวๆ ของ Data ของเราแล้ว ก็เข้าสู่ส่วนของการสร้าง Elasticity Model กันค่ะ โดยในบทความนี้นิกจะพาสร้างโมเดลทั้งสองแบบคือ

  • โมเดลความยืดหยุ่นของราคาเชิงเส้น
  • โมเดลความยืดหยุ่นของราคาแบบไม่เป็นเชิงเส้น

โมเดลความยืดหยุ่นของราคาเชิงเส้น: Linear Price Elasticity

โดยที่ค่าความยืดหยุ่นของราคาเชิงเส้นสามารถคำนวณได้จากสมการฟังก์ชันความต้องการแบบเชิงเส้น ตามสมการ

Linear Demand Function Q = a+b*P
Linear Elasticity E = %ΔQ/%ΔP
= ΔQ/ (Q/ΔP)/ P
= (ΔQ/ΔP) x (P/Q)

ซึ่งความสัมพันธ์ระหว่างราคากับปริมาณไม่จำเป็นต้องเป็นเชิงเส้นหรือ Linear เสมอไปนะคะ (ให้ทุกท่านลองดูที่ Scatter plot แรกที่เรา Plot ออกมาดูค่ะ จะเห็นว่าค่อนข้างไม่เป็นเชิงเส้นเท่าไหร่) โดยสิ่งที่เราจะทำคือสำรวจฟังก์ชันความต้องการแบบเชิงเส้นเพื่อตรวจสอบประสิทธิภาพของโมเดลเชิงเส้นค่ะ(^∀^●)ノシ ด้วยการใช้ Statsmodels ของ Python สำหรับการประเมิน Ordinary Least Squares (OLS) โดยเราจะทำการวิเคราะห์สัมประสิทธิ์ (b) จากสมการ Linear Demand Function เพื่อกำหนดความยืดหยุ่นของราคาแบบเชิงเส้น ด้วย Code ด้านล่างนี้ค่ะ

import statsmodels.api as sm
from statsmodels.tools.tools import add_constant
x_value = df[‘Price’]
y_value = df[‘Quantity’]
X = add_constant(x_value)
model = sm.OLS(y_value, X)
result = model.fit()
print(result.summary())

การปรับราคาสินค้าให้เหมาะสมด้วย Price Elasticity Model บน Python

จากผลการรันตามภาพด้านบนจะเห็นว่ามีค่า P ที่ต่ำมาก (0.000) ค่ะ ซึ่งสิ่งนี้เป็นการชี้ให้เห็นว่าเราสามารถปฏิเสธสมมติฐานที่ว่าราคาไม่มีผลต่อปริมาณได้ โดยหากเราดูจากค่า R-squared เท่ากับ 0.049 (ซึ่งถือว่าค่อนข้างต่ำนะคะ) จะสามารถบอกเราได้ว่าโมเดลของเราไม่สามารถอธิบายความแปรปรวนของการตอบสนองได้มากนักค่ะ

แต่ถึงแม้ว่าโมเดลเชิงเส้น หรือ Linear Model นี้จะมีข้อจำกัดในการจัดการกับความซับซ้อนของข้อมูลการกำหนดราคา แต่เรายังคงใช้สูตรความยืดหยุ่นของราคาแบบเชิงเส้นเพื่อวัตถุประสงค์ในการคำนวณอื่นๆ ได้ค่ะ

โดยหากเพื่อนๆ ลองรันโค้ดด้านล่างสำหรับในกรณีนี้ เราจะได้ค่าความยืดหยุ่นของราคาแบบเชิงเส้นเท่ากับ -0.79 ซึ่งหากเพื่อนๆ ลองขึ้นไปดูนิยามของค่า Price Elasticity ด้านบนจะพบว่าการที่ค่านี้ติดลบ หมายความว่ามีค่า “ความยืดหยุ่นต่ำ” นั่นเองค่ะ

และจากการที่ Linear Model เหมือนจะไม่ตอบโจทย์เท่าไหร่สำหรับข้อมูลของเรา เนื่องจากข้อมูลอาจมีความซับซ้อนเกินกว่าจะใช้สมการเชิงเส้น ดังนั้นต่อไปนิกจะพาเพื่อนๆ ไปลองให้โมเดลแบบไม่เป็นเชิงหรือ Non-linear model กันดูค่ะ (ノ◕ヮ◕)ノ*:・゚✧

โมเดลความยืดหยุ่นของราคาแบบไม่เป็นเชิงเส้น: Non-linear Price Elasticity

จากข้อจำกัดและผลลัพธ์ที่เราได้มาในโมเดลเชิงเส้น ดังนั้นเรามาลองรันโมเดลที่ไม่เป็นเชิงเส้นตาม Code ด้านล่างนี้กันดูค่ะ (^∀^●)ノシ

import statsmodels.api as sm
from statsmodels.tools.tools import add_constant
import numpy as np
x_value = np.log(df[‘Price’])
y_value = np.log(df[‘Quantity’])
X = add_constant(x_value)
model = sm.OLS(y_value, X)
result = model.fit()
print(result.summary())

ซึ่งพบว่าก็ได้ค่า P ที่ต่ำออกมาเช่นเดียวกันค่ะ แต่เราได้ค่า R-squared ที่ดีขึ้นเป็น 0.132 แต่ทั้งหมดทั้งมวลก็หมายความว่าเราควรมีการปรับปรุงโมเดลทางคณิตศาสตร์นี้ให้ดีขึ้นค่ะ

โดยเราจะหาค่า สัมประสิทธิ์ b ของการปรับสมการเชิงเส้นกันต่อจากโค้ดด้านบน เพื่อใช้กับค่า (Non-linear elastricity price) ที่ค่าความยืดหยุ่นของราคาแบบเชิงเส้นเท่ากับ -1.07 ที่เป็นผลลัพธ์จากการรัน Code ตามภาพด้านบน แต่จากการที่ความสัมพันธ์นี้เป็นความสัมพันธ์แบบไม่เป็นเชิงเส้น จังเป็นการใช้ Logarithm function (แบบเดียวกับที่เราเรียนคณิตศาสตร์ ม.6) ในการทำสมการถดถอย เพื่อหาจุดตัดแกน ดังนั้นเราคืนค่ากลับด้วยการเทค Exponential: exp()

และแล้วเราก็จะได้สมการความสัมพันธ์แบบไม่เป็นเชิงเส้นสำหรับสินค้า/บริการนี้ออกมาดังนี้ค่ะ =>>

ปริมาณ = (สัมประสิทธิ์b) x ราคา x (ค่า Elasticity)
= 186652 x ราคา x (-1.07)

และหลังจากที่เราได้สมการ และค่าพารามิเตอร์ที่เราต้องการออกมาแล้ว สิ่งสำคัญอีกสิ่งหนึ่งที่พวกเราต้องพิจารณาต่อคือ เรื่องของการตีความจากค่า “ความยืดหยุ่นของราคา: Elasticity” ที่เราได้ออกมา ซึ่งสามารถแบ่งเป็น 5 ช่วงหลักๆ ได้ดังนี้ค่ะ

  • เมื่อค่า Elasticity = -1
    หมายความว่า อุปสงค์มีความยืดหยุ่นคงที่ นั่นคือการเปลี่ยนแปลงเปอร์เซ็นต์ของปริมาณความต้องการซื้อสินค้า/บริการ จะเท่ากับการเปลี่ยนแปลงของราคา ซึ่งสิ่งนี้จะทำให้ได้ demand curve ออกมาที่ความชัน -1
  • เมื่อค่า Elasticity = 0
    หมายความว่า ปริมาณความต้องการซื้อไม่ขึ้นกับการเปลี่ยนแปลงของราคา หรือปริมาณความต้องการซื้อจะไม่มีการเปลี่ยนแปลงเลย ไม่ว่าราคาสินค้าหรือบริการนั้นๆ จะมีการเปลี่ยนแปลงไปอย่างไรก็ตามค่ะ
  • เมื่อค่าอยู่ในช่วง 1 < Elasticity < 0
    หมายความว่า อุปสงค์มีความยืดหยุ่นน้อย กล่าวคือ เมื่อราคาสินค้าหรือบริการของเรามีการเปลี่ยนแปลงไป 1% แต่ปริมาณการซื้อกลับเปลี่ยนแปลงไปไม่ถึง 1%
  • เมื่อค่าอยู่ในช่วง -∞ < Elasticity < -1
    หมายความว่า อุปสงค์มีความยืดหยุ่นมาก กล่าวคือ เมื่อราคาสินค้าหรือบริการของเรามีการเปลี่ยนแปลงไป 1% แต่ปริมาณการซื้อจะยิ่งมีการเปลี่ยนแปลงไปมากกว่า 1% ขึ้นไปอีก
  • เมื่อค่า Elasticity เป็น -∞
    หมายความว่า อุปสงค์มีความยืดหยุ่นอย่างสมบูรณ์ นั่นคือการเพิ่มราคาของสินค้าเพียงเล็กน้อยก็จะทำให้ Demand ลดลงเป็นศูนย์ ซึ่งหาก Plot กราฟดูจะพบว่าแทบจะได้กราฟออกมาเป็นเส้นตรงตามแนวแกนนอน

และจากผลลัพธ์ของค่า Elasticity หรือค่าความยืดหยุ่นของราคาที่เราได้ออกมาจาก Non-linear Price Elastic Model เท่ากับ -1.07 ซึ่งอยู่ในช่วง -∞ < Elasticity < -1 หมายความว่าอุปสงค์ของสินค้าหรือบริการของเรามีความยืดหยุ่นมาก โดยจากค่าที่ติดลบหมายถึง ทุกการเพิ่มราคาขึ้น 1% จะทำให้ความต้องการลดลง 1.07% นั่นเองค่ะ^^

เมื่อเราทราบดังนี้แล้ว คำถามต่อไปก็คือ แล้วเราจะตั้งราคาอย่างไรให้เหมาะสมล่ะ? เมื่อวิเคราะห์จากข้อมูลของเราค่ะ 🧐🔎

การปรับราคาสินค้าให้เหมาะสม: Price Optimization

และแล้วเราก็มาถึงส่วนสำคัญที่สุดซึ่งเป็นเป้าหมายของบทความค่ะ นั่นคือการทำ Price Optimization หรือการหาค่าที่เหมาะสมที่สุดของราคาสินค้าและบริการ โดยพิจารณาร่วมกับค่า “ความยืดหยุ่นของราคา” ที่เราคำนวณกันมาก่อนหน้านี้ค่ะ

โดยเราจะพิจารณาที่ราคาที่ค่าต่างๆ เพื่อทำความเข้าใจว่า Demand และ Revenue ของสินค้า/บริการของเรามีการเปลี่ยนแปลงไปอย่างไรตามสมการ Elasticity และ Demand ที่เราหากันมาก่อนหน้านี้ค่ะ

ซึ่งในตัวอย่างนี้ด้วยความที่หน่วยเป็น USD นิกจะพิจารณาช่วงราคาระหว่าง 15 ถึง 1000 USD โดยเราจะให้ Objective ของเราคือ การได้ค่า Revenue ที่สูงที่สุดจากสมการ Demand = 186652 x ราคา x (-1.07)

โดยเราจะใช้ Code ด้านล่างนี้เพื่อหาราคาที่เหมาะสมที่สุดที่จะทำให้เราได้ค่า Revenue สูงที่สุดออกมาค่ะ =>>

# Set price elasticity range
elasticity = -1.07
# Set price range
price = list(np.linspace(15, 1000, num=100))
demand = 186652 * np.power(price,elasticity)
revenue = price  * demand
max_revenue = np.max(revenue)
max_index = np.argmax(revenue)
print(price[max_index])

และเพื่อให้สามารถมองภาพการเปลี่ยนแปลงของ Revenue ต่อราคาได้อย่างชัดเจนเราจะ Plot กราฟออกมาดูความสัมพันธ์ของ Revenue – Price ดังนี้ค่ะ

ซึ่งจากกราฟของสินค้าตัวอย่างของเราในบทความนี้ เราจะเห็นเลยค่ะว่ารายได้สูงสุดเกิดขึ้นเมื่อราคาต่ำที่สุด ซึ่งความแตกต่างเปอร์เซ็นต์ระหว่างรายได้สูงสุด (ประมาณ154,000 USD) และรายได้ต่ำสุด (ประมาณ 115,000 USD) อยู่ที่ประมาณ 35% โดยความชันของกราฟน้อยลงเมื่อราคามากกว่า 200 USD ซึ่งหมายความว่า ต่อให้เราตั้งราคาสูงว่านี้ และจากลักษณะของการตอบสนองต่อราคาของลูกค้า จะทำให้ Revenue ที่เราจะได้ไม่เปลี่ยนแปลงไปมากนักนั่นเองค่ะ

ซึ่งส่วนนี้เป็นกรณีที่เราใช้ข้อมูลตัวอย่างของเราที่ค่า Elasticity = -1.07 นะคะ แล้วถ้าค่า Price Elasticity มีการเปลี่ยนแปลงไปจะเกิดอะไรขึ้นบ้าง? เรามาลอง Plot Graph กันชิวๆ ตามภาพด้านล่างนี้เลยค่ะ

ซึ่งจากผลลัพธ์จะขอพิจารณาความยืดหยุ่นสินค้าต่อการเปลี่ยนแปลงราคาเป็น 2 แบบหลักๆ คือ แบบที่มีความยืดหยุ่นสูง: หมายความว่าผู้บริโภคมีความไวต่อการเปลี่ยนแปลงของราคาอย่างมาก เราจึงจำเป็นต้องใช้กลยุทธ์การกำหนดราคาที่ต่ำลง (แต่ไม่ต้องต่ำจน Revenue น้อย: ให้ทุกท่านขึ้นไปรัน Code Price-Revenue เพื่อดูราคาที่เราโอเคนะคะ) เพื่อดึงดูดลูกค้ามากขึ้น และเพิ่มยอดขาย ซึ่งอาจสามารถกระตุ้นยอดซื้อจากลูกค้าสำหรับสินค้าประเภทนี้ได้ด้วยการลดราคาหรือเสนอส่วนลด คูปอง หรือข้อเสนอส่งเสริมการขายอื่นๆ ค่ะ

แบบที่มีความยืดหยุ่นต่ำ: หมายความว่าผู้บริโภคไม่ค่อยไวต่อการเปลี่ยนแปลงของราคา ซึ่งเราสามารถใช้กลยุทธ์การกำหนดราคาที่สูงขึ้นได้ โดยไม่จำเป็นต้องกังวลว่ายอดขายจะตกลง แต่แน่นอนค่ะว่า เราจะขึ้นราคาเพียงอย่างเดียวไม่ได้ แต่ควรเพิ่มราคาผลิตภัณฑ์พร้อมกับการเพิ่ม Features ต่างๆ หรือเพิ่มบริการ ให้การขึ้นราคาของเราดูสมเหตุสมผล

ท้ายสุดเราลองกลับมาที่ชุดข้อมูล https://github.com/Nick-Panaya/price_elasticity_data/ นี้ของเรากันดูค่ะ โดยนิกใช้ df.descrice() เพื่อดูค่าทางสถิติต่างๆ

ซึ่งจากผลลัพธ์เราจะสังเกตเห็นว่าราคามัธยฐาน (Percentile ที่ 50%) มีค่าเท่ากับ 187 USD ซึ่งสอดคล้องกับผลลัพธ์จากกราฟที่เรา Plot ออกมาเพื่อดู Revenue ที่พบว่า ราคาขายที่เกิน 200 USD ไม่ช่วยเพิ่มรายได้ให้เราแต่อย่างใดเลยค่ะ โดยลูกค้าสำหรับสินค้าประเภทนี้เป็นกลุ่ม มีความยืดหยุ่นสูง ซะด้วย ดังนั้นด้วยการใช้กลยุทธ์การกำหนดราคาที่ต่ำลง จะทำให้เราได้ประโยชน์จากความต้องการที่ยืดหยุ่นสูงของสินค้า/บริการนี้ ในการกำหนดกลยุทธ์เพื่อเพิ่มรายได้โดยรวมนั่นเองค่ะ^^

หวังเป็นอย่างยิ่งค่ะว่าเพื่อนๆ ชาว Marketer หรือแม้แต่ Researcher ทุกท่านจะได้ประโยชน์จากบทความนี้ ในการทำ Optimization หรือการหาค่าที่เหมาะสมของราคาโดยพิจารณาถึงความเป็น Elasticity ของสินค้า/บริการ ของเรา เพราะอย่างที่เราทราบกันดีค่ะว่า “ราคา” ถือเป็นหนึ่งในปัจจัยสำคัญในการตัดสินใจซื้อสินค้า โดย Code ในบทความนี้ก็ใช้งานและสามารถรันตามได้ไม่อยากค่ะ ซึ่งหากท่านใดต้องการเปลี่ยนข้อมูลเป็นสินค้าของตัวเองก็สามารถทำได้ง่ายๆ โดยการโยนไฟล์ .csv เข้าไปแทนที่ไฟล์ที่นิกให้มาได้เลย^^ และสำหรับเพื่อนๆ ที่ไม่อยาก dirty hand พิมพ์โค้ด ก็สามารถ Scan QR code ที่ภาพปก หรือกดที่ Link นี้ได้เลยค่ะ (☞゚ヮ゚)☞ https://bit.ly/Price_Elasticity_Model_on_Python

Panaya Sudta

Hi, I am Nick,,,,Panaya Sudta (●'◡'●) Engineer during the daytime. Researcher at night. Reader in spare time. (❁´◡`❁) วิศวกร/นักวิจัย และเป็นน้องใหม่ของการตลาดวันละตอน ในการทำ Market research ค่ะ หวังเป็นอย่างยิ่งว่าจะได้แชร์มุมมองกันนะคะ

Leave a Reply

Your email address will not be published. Required fields are marked *