72.3%
+18.4
3.2%
104B
8.7≈
+2.1%

1 مقدمة

يشغل سوق الإيجارات موقعًا حساسًا في الاقتصاد السعودي لأنه يقع عند تقاطع ثلاثة ملفات كبرى: تكلفة المعيشة، والحراك الحضري، والقدرة على السكن. وعندما ترتفع الإيجارات، فإن الأثر لا يبقى داخل القطاع العقاري فقط، بل ينتقل مباشرة إلى مؤشر أسعار المستهلك، وإلى سلوك الأسر، وإلى النقاشات المرتبطة بالتنمية الحضرية والتخطيط والإسكان.

ينطلق هذا التقرير من تجميع منظم لعدة مصادر رقمية متاحة، ثم يحاول الإجابة عن سؤال أكبر من مجرد: كم ارتفع الإيجار؟، وهو: كيف يبدو هيكل السوق الإيجاري في السعودية، وأين يتركز الضغط، وما الذي يمكن استنتاجه بشأن الاتجاه القصير الأجل؟

يعتمد التقرير على بيانات هيكلية عن المساكن المؤجرة في 2024، وبيانات تضخم مرتبطة بالإيجارات في 2025–2026، وبيانات معاملات منشورة في أخبار حكومية مختارة خلال 2023. لذلك فهو تقرير وصفي تحليلي يجمع بين بنية السوق والضغط السعري والنشاط التشغيلي.

2 أهداف الدراسة وأسئلة البحث

2.1 أهداف الدراسة

  1. توصيف حجم سوق الإيجارات داخل هيكل السكن السعودي.
  2. تحديد الشرائح السعرية المهيمنة وقياس تمركزها جغرافيًا.
  3. وصف العلاقة بين الإيجارات والتضخم الرسمي.
  4. تصنيف المناطق إداريًا إلى عناقيد سوقية متشابهة.
  5. تقديم توقع قصير الأجل لاتجاه نمو الإيجارات الرسمية.

2.2 أسئلة البحث

  1. ما حجم الإيجار داخل سوق السكن السعودي مقارنة بالملكية؟
  2. ما الشريحة السعرية الأكثر انتشارًا على المستوى الوطني؟
  3. هل الضغط الإيجاري متجانس بين المناطق أم يتركز في مناطق بعينها؟
  4. ما نوع السكن الذي يقود السوق الإيجاري؟
  5. كيف انعكس الإيجار على التضخم الرسمي خلال 2025–2026؟
  6. هل يمكن تقسيم المناطق إلى أنماط سوقية مختلفة باستخدام K-means؟
  7. ما الاتجاه القصير الأجل المتوقع لنمو الإيجارات الرسمية؟

3 مصادر البيانات وتجهيزها

base_dir <- if (file.exists("rent_region_2024.csv")) "." else "saudi_rent_report"

rent_region <- read_csv(file.path(base_dir, "rent_region_2024.csv"), show_col_types = FALSE)
housing_type <- read_csv(file.path(base_dir, "housing_type_totals_2024.csv"), show_col_types = FALSE)
rent_band <- read_csv(file.path(base_dir, "rent_band_totals_2024.csv"), show_col_types = FALSE)
tenure <- read_csv(file.path(base_dir, "housing_tenure_totals_2024.csv"), show_col_types = FALSE)
cpi_rent <- read_csv(file.path(base_dir, "cpi_rent_pressures_2025_2026.csv"), show_col_types = FALSE)
transactions <- read_csv(file.path(base_dir, "monthly_rental_transactions_2023.csv"), show_col_types = FALSE)
national_rented_units <- sum(rent_band$units)
total_occupied_units <- sum(tenure$units)
rent_share <- tenure |> filter(tenure == "Rented") |> pull(share_pct)
owned_share <- tenure |> filter(grepl("Ownership", tenure)) |> summarise(s = sum(share_pct)) |> pull(s)
apartment_share <- housing_type |> filter(housing_type == "Apartment") |> pull(share_pct)
mid_band_share <- rent_band |> filter(rent_band == "10,001-20,000 SAR") |> pull(share_pct)
high_band_share <- rent_band |> filter(rent_band == ">30,000 SAR") |> pull(share_pct)
riyadh_makkah_share <- rent_region |>
  filter(region_ar %in% c("الرياض", "مكة المكرمة")) |>
  summarise(s = sum(share_of_national_rented_pct)) |>
  pull(s)

rent_growth_latest <- cpi_rent |> filter(!is.na(actual_rent_yoy)) |> slice_tail(n = 1) |> pull(actual_rent_yoy)
rent_growth_peak <- cpi_rent |> filter(!is.na(actual_rent_yoy)) |> summarise(m = max(actual_rent_yoy)) |> pull(m)

3.1 وصف البيانات المستخدمة

tibble(
  المصدر = c(
    "Housing Statistics Bulletin 2024",
    "CPI Bulletins 2025–2026",
    "أخبار مؤشر الإيجار 2023"
  ),
  نوع_البيانات = c(
    "بنية السوق السكني: حيازة، نوع سكن، شرائح إيجارية، مناطق",
    "تضخم عام، تضخم السكن، تغير الإيجارات الفعلية",
    "حجم المعاملات الإيجارية في أشهر مختارة"
  ),
  الاستخدام_في_التقرير = c(
    "التحليل الوصفي والخرائط الحرارية والعنقدة",
    "تحليل الضغط السعري والتوقع القصير الأجل",
    "قياس النشاط السوقي وتفسير الحركية الشهرية"
  )
) |>
  kable(caption = "ملخص مصادر البيانات ودورها في التحليل")
ملخص مصادر البيانات ودورها في التحليل
المصدر نوع_البيانات الاستخدام_في_التقرير
Housing Statistics Bulletin 2024 بنية السوق السكني: حيازة، نوع سكن، شرائح إيجارية، مناطق التحليل الوصفي والخرائط الحرارية والعنقدة
CPI Bulletins 2025–2026 تضخم عام، تضخم السكن، تغير الإيجارات الفعلية تحليل الضغط السعري والتوقع القصير الأجل
أخبار مؤشر الإيجار 2023 حجم المعاملات الإيجارية في أشهر مختارة قياس النشاط السوقي وتفسير الحركية الشهرية
ملاحظة منهجية: البيانات هنا ليست سلسلة موحدة المصدر والزمن بالكامل، بل مزيج من بيانات هيكلية لعام 2024، وضغط تضخمي لعامي 2025–2026، ومعاملات مختارة من 2023. لذلك ينبغي قراءة النتائج بوصفها تحليلًا وصفيًا مركبًا يربط مستويات مختلفة من السوق.

4 الملخص التنفيذي

5 الإحصاءات الوصفية العامة

5.1 لوحة رقمية مختصرة

summary_board <- tibble(
  المؤشر = c(
    "إجمالي المساكن المشغولة بأسر سعودية",
    "إجمالي المساكن المستأجرة",
    "حصة الإيجار من السوق السكني",
    "حصة الملكية من السوق السكني",
    "حصة الشقق من السوق الإيجاري",
    "حصة شريحة 10–20 ألف",
    "حصة شريحة >30 ألف",
    "أحدث نمو سنوي للإيجارات الرسمية"
  ),
  القيمة = c(
    comma(total_occupied_units),
    comma(national_rented_units),
    fmt_pct(rent_share, 1),
    fmt_pct(owned_share, 1),
    fmt_pct(apartment_share, 1),
    fmt_pct(mid_band_share, 1),
    fmt_pct(high_band_share, 1),
    fmt_pct(rent_growth_latest, 1)
  )
)

kable(summary_board, caption = "أهم المؤشرات الوصفية المختصرة")
أهم المؤشرات الوصفية المختصرة
المؤشر القيمة
إجمالي المساكن المشغولة بأسر سعودية 4,387,231
إجمالي المساكن المستأجرة 1,409,053
حصة الإيجار من السوق السكني 32.1%
حصة الملكية من السوق السكني 56.3%
حصة الشقق من السوق الإيجاري 83.5%
حصة شريحة 10–20 ألف 50.1%
حصة شريحة >30 ألف 14.3%
أحدث نمو سنوي للإيجارات الرسمية 5.2%

5.2 إحصاءات وصفية للمناطق

region_desc <- rent_region |>
  summarise(
    `عدد المناطق` = n(),
    `متوسط الوحدات المستأجرة` = mean(total_rented_units),
    `الوسيط` = median(total_rented_units),
    `الحد الأدنى` = min(total_rented_units),
    `الحد الأعلى` = max(total_rented_units),
    `متوسط حصة المنطقة من السوق %` = mean(share_of_national_rented_pct),
    `متوسط نسبة >30 ألف داخل المنطقة %` = mean(pct_gt_30k_within_region)
  ) |>
  pivot_longer(everything(), names_to = "المؤشر", values_to = "القيمة") |>
  mutate(القيمة = ifelse(str_detect(المؤشر, "%"), fmt_num(as.numeric(القيمة), 2), fmt_num(as.numeric(القيمة), 0)))

kable(region_desc, caption = "إحصاءات وصفية لتوزيع السوق الإيجاري بين المناطق")
إحصاءات وصفية لتوزيع السوق الإيجاري بين المناطق
المؤشر القيمة
عدد المناطق 13
متوسط الوحدات المستأجرة 108,389
الوسيط 43,615
الحد الأدنى 11,093
الحد الأعلى 381,925
متوسط حصة المنطقة من السوق % 7.69
متوسط نسبة >30 ألف داخل المنطقة % 6.00

5.2.1 تفسير أولي

تكشف الإحصاءات الوصفية للمناطق أن سوق الإيجار غير متوازن الحجم؛ فهناك فجوة واضحة بين المناطق الكبرى وبقية المناطق. كما أن الفرق بين المتوسط والوسيط في عدد الوحدات المستأجرة يوحي بوجود انحراف باتجاه المناطق الكبيرة، وهو ما يبرر لاحقًا استخدام التحليل المكاني والعنقودي بدلًا من الاكتفاء بالمتوسطات العامة.

6 هيكل السكن: أين تقع الإيجارات ضمن سوق السكن السعودي؟

tenure |>
  mutate(
    share_pct = round(share_pct, 2),
    units = comma(units)
  ) |>
  kable(
    col.names = c("نوع الحيازة", "عدد الوحدات", "النسبة %"),
    caption = "توزيع المساكن المشغولة بأسر سعودية حسب نوع الحيازة – 2024"
  )
توزيع المساكن المشغولة بأسر سعودية حسب نوع الحيازة – 2024
نوع الحيازة عدد الوحدات النسبة %
Ownership without mortgage/loan 1,632,581 37.21
Ownership with mortgage/loan 837,164 19.08
Rented 1,409,053 32.12
Government work provided 62,798 1.43
Private work provided 6,948 0.16
Charitable organization provided 20,779 0.47
Benefactor provided 8,270 0.19
Family member provided 409,064 9.32
Other 574 0.01
ggplot(tenure, aes(x = reorder(tenure, units), y = units)) +
  geom_col(fill = "#2c7fb8") +
  coord_flip() +
  scale_y_continuous(labels = comma) +
  labs(
    title = "أنواع الحيازة السكنية في السعودية",
    subtitle = "المساكن المشغولة بأسر سعودية – 2024",
    x = NULL,
    y = "عدد الوحدات"
  )

6.1 التفسير

توضح هذه النتائج أن الإيجار يمثل كتلة سكنية كبيرة داخل المملكة، إذ يشكل نحو ثلث المساكن المشغولة تقريبًا. وهذا يعني أن أي تغير في الإيجارات ليس تغيرًا طرفيًا، بل هو تغير يمس شريحة واسعة من الأسر. كما أن ارتفاع نسبة الملكية لا يلغي أهمية الإيجار، لأن السوقين يتعايشان داخل بنية سكنية واحدة، ويؤثر كل منهما في الآخر عبر الأسعار والطلب والتنقل السكني.

7 توزيع الإيجارات حسب الشريحة السعرية

rent_band |>
  mutate(
    units = comma(units),
    share_pct = round(share_pct, 2)
  ) |>
  kable(
    col.names = c("شريحة الإيجار", "عدد الوحدات", "النسبة %"),
    caption = "توزيع الوحدات المستأجرة حسب شريحة الإيجار – 2024"
  )
توزيع الوحدات المستأجرة حسب شريحة الإيجار – 2024
شريحة الإيجار عدد الوحدات النسبة %
<=10k SAR 66,807 4.74
10,001-20,000 SAR 706,233 50.12
20,001-30,000 SAR 434,475 30.83
>30,000 SAR 201,538 14.30
ggplot(rent_band, aes(x = rent_band, y = units)) +
  geom_col(fill = "#41ab5d") +
  scale_y_continuous(labels = comma) +
  labs(
    title = "توزيع الوحدات المستأجرة حسب شريحة الإيجار",
    subtitle = "هيمنة واضحة للشريحة المتوسطة وطنيًا",
    x = NULL,
    y = "عدد الوحدات"
  )

7.1 التفسير

تظهر البيانات أن السوق الوطني يتمركز أساسًا في الشريحة المتوسطة، ولا سيما شريحة 10–20 ألف ريال سنويًا. هذه النتيجة مهمة لأنها تفصل بين الصورة الوطنية والانطباع العام المتأثر غالبًا بالأسواق الأعلى سعرًا. فوجود شريحة مرتفعة السعر لا يعني أن السوق كله مرتفع؛ بل يشير إلى أن الضغط السعري قد يكون متمركزًا في مناطق أو مدن بعينها، بينما يبقى الجسد الأكبر للسوق في مستويات أقل.

8 التوزيع الجغرافي للإيجارات

rent_region |>
  arrange(desc(total_rented_units)) |>
  mutate(
    total_rented_units = comma(total_rented_units),
    share_of_national_rented_pct = round(share_of_national_rented_pct, 2),
    pct_gt_30k_within_region = round(pct_gt_30k_within_region, 2)
  ) |>
  select(region_ar, total_rented_units, share_of_national_rented_pct, pct_gt_30k_within_region) |>
  kable(
    col.names = c("المنطقة", "عدد الوحدات المستأجرة", "حصة المنطقة من الإجمالي %", "نسبة >30 ألف داخل المنطقة %"),
    caption = "أهم المناطق من حيث عدد المساكن المستأجرة – 2024"
  )
أهم المناطق من حيث عدد المساكن المستأجرة – 2024
المنطقة عدد الوحدات المستأجرة حصة المنطقة من الإجمالي % نسبة >30 ألف داخل المنطقة %
مكة المكرمة 381,925 27.11 6.95
الرياض 345,002 24.48 39.85
المنطقة الشرقية 234,114 16.61 10.84
المدينة المنورة 128,475 9.12 4.23
عسير 102,120 7.25 3.40
تبوك 50,230 3.56 1.12
القصيم 43,615 3.10 1.89
جازان 36,847 2.62 0.00
نجران 22,048 1.56 1.62
حائل 20,823 1.48 4.69
الجوف 17,988 1.28 1.19
الحدود الشمالية 14,773 1.05 0.98
الباحة 11,093 0.79 1.28
rent_region |>
  arrange(desc(total_rented_units)) |>
  ggplot(aes(x = reorder(region_ar, total_rented_units), y = total_rented_units)) +
  geom_col(fill = "#756bb1") +
  coord_flip() +
  scale_y_continuous(labels = comma) +
  labs(
    title = "عدد المساكن المستأجرة حسب المنطقة الإدارية",
    subtitle = "مكة المكرمة والرياض في صدارة السوق",
    x = NULL,
    y = "عدد الوحدات"
  )

rent_region |>
  arrange(desc(pct_gt_30k_within_region)) |>
  ggplot(aes(x = reorder(region_ar, pct_gt_30k_within_region), y = pct_gt_30k_within_region)) +
  geom_col(fill = "#dd1c77") +
  coord_flip() +
  scale_y_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  labs(
    title = "نسبة الوحدات ذات الإيجار الأعلى من 30 ألف ريال داخل كل منطقة",
    subtitle = "مؤشر على تمركز الشريحة العليا سعريًا",
    x = NULL,
    y = "النسبة داخل المنطقة"
  )

8.1 التفسير

تكشف القراءة الجغرافية نتيجتين متوازيتين: الأولى أن السوق متمركز حجميًا في مناطق رئيسية مثل مكة المكرمة والرياض، والثانية أن التمركز السعري المرتفع لا يتوزع بنفس الطريقة. فبعض المناطق كبيرة الحجم لكنها ما تزال أقرب إلى الشرائح المتوسطة، بينما تبدو الرياض أقرب إلى سوق مرتفع السعر نسبيًا. وهذا يفسر لماذا قد يشعر المتابع بحدة الأزمة من خلال الرياض، في حين أن المتوسط الوطني لا يعكس دائمًا نفس الدرجة من السخونة.

9 الإيجارات حسب نوع السكن

housing_type |>
  mutate(
    units = comma(units),
    share_pct = round(share_pct, 2)
  ) |>
  kable(
    col.names = c("نوع السكن", "عدد الوحدات", "النسبة %"),
    caption = "الوحدات المستأجرة حسب نوع السكن – 2024"
  )
الوحدات المستأجرة حسب نوع السكن – 2024
نوع السكن عدد الوحدات النسبة %
Traditional House 44,896 3.19
Villa 66,700 4.73
Floor 109,747 7.79
Apartment 1,176,382 83.49
Other 11,328 0.80
ggplot(housing_type, aes(x = reorder(housing_type, units), y = units)) +
  geom_col(fill = "#3182bd") +
  coord_flip() +
  scale_y_continuous(labels = comma) +
  labs(
    title = "الوحدات المستأجرة حسب نوع السكن",
    subtitle = "هيمنة واضحة للشقق على هيكل السوق الإيجاري",
    x = NULL,
    y = "عدد الوحدات"
  )

9.1 التفسير

تؤكد البيانات أن الشقق هي القلب الحقيقي لسوق الإيجار في السعودية. وهذه النتيجة ليست شكلية، بل تحليلية؛ لأنها تعني أن أي خلل في المعروض من الشقق، أو أي زيادة في الطلب الحضري، سينعكس مباشرة على مؤشر الإيجار العام. لذلك فإن السياسات الموجهة إلى الشقق، من حيث المعروض والتنظيم والتمويل، غالبًا ما تكون أعلى أثرًا من التدخلات العامة غير المتخصصة.

10 الإيجار والتضخم: ماذا قالت النشرات الرسمية؟

cpi_rent |>
  mutate(across(c(overall_cpi_yoy, housing_division_yoy, actual_rent_yoy), round, 2)) |>
  kable(
    col.names = c("الشهر", "التضخم العام %", "قسم السكن %", "الإيجارات الفعلية %", "إيجار السكن الأساسي %", "ملاحظة"),
    caption = "مؤشرات الضغط الإيجاري في نشرات CPI الرسمية"
  )
مؤشرات الضغط الإيجاري في نشرات CPI الرسمية
الشهر التضخم العام % قسم السكن % الإيجارات الفعلية % إيجار السكن الأساسي % ملاحظة
2025-01 2.0 8.0 9.7 NA old methodology; includes villa rents
2025-08 2.3 5.8 7.6 7.6 new methodology
2025-09 2.2 5.2 6.7 6.7 new methodology
2025-11 1.9 4.3 5.4 5.4 new methodology
2025-12 2.1 4.1 5.3 5.3 new methodology
2026-01 1.8 4.2 5.2 5.2 new methodology
cpi_rent |>
  ggplot(aes(x = month, y = actual_rent_yoy, group = 1)) +
  geom_line(linewidth = 1, color = "#e6550d") +
  geom_point(size = 2, color = "#e6550d") +
  scale_y_continuous(labels = function(x) paste0(x, "%")) +
  labs(
    title = "التغير السنوي في الإيجارات الفعلية في النشرات الرسمية",
    subtitle = "ارتفاع قوي ثم تباطؤ نسبي في الزخم السعري",
    x = NULL,
    y = "النسبة السنوية"
  )

10.1 التفسير

تكشف بيانات مؤشر أسعار المستهلك أن الإيجارات لم تكن مجرد تفصيل فرعي في التضخم، بل كانت من أهم محركاته خلال الفترات المتاحة. واللافت أن التباطؤ اللاحق لا يعني هبوط الإيجارات، بل يعني أن سرعة الارتفاع نفسها بدأت تهدأ. وهذا فرق جوهري بين تباطؤ النمو وانخفاض المستوى السعري. كما أن تحديث المنهجية في بعض النشرات يستدعي الحذر عند المقارنة الصارمة، لكنه لا يغير الرسالة العامة: السكن، وبالأخص الإيجارات، كان في مركز التضخم السعودي.

11 نشاط السوق: معاملات مؤشر الإيجار / إيجار

transactions |>
  mutate(across(where(is.numeric), ~ifelse(is.na(.x), NA, round(.x, 0)))) |>
  kable(caption = "أرقام مختارة من أخبار مؤشر الإيجار في 2023")
أرقام مختارة من أخبار مؤشر الإيجار في 2023
month total_transactions residential_transactions commercial_transactions riyadh_transactions jeddah_transactions makkah_transactions madinah_transactions dammam_transactions riyadh_value_sar_mn
2023-04 176000 152000 23000 50000 30000 8400 7900 9000 NA
2023-05 262000 NA 59000 58000 35000 12000 10000 12000 NA
2023-06 240000 NA 50000 54000 32000 11000 10500 NA NA
2023-07 275000 NA NA 58000 35000 13000 13000 12000 900
2023-08 340000 275000 65000 71000 NA NA NA NA NA
2023-09 294000 NA 61000 65000 37000 13000 13000 12900 NA
transactions |>
  ggplot(aes(x = month, y = total_transactions, group = 1)) +
  geom_line(linewidth = 1, color = "#238b45") +
  geom_point(size = 2, color = "#238b45") +
  scale_y_continuous(labels = comma) +
  labs(
    title = "إجمالي المعاملات الإيجارية المنشورة في الأخبار الحكومية المختارة",
    subtitle = "نشاط مرتفع مع دفعات واضحة خلال بعض الأشهر",
    x = NULL,
    y = "عدد المعاملات"
  )

11.1 التفسير

رغم أن هذه السلسلة ليست كاملة إحصائيًا لكل الأشهر، فإنها تقدم إشارة مهمة عن الحركية التشغيلية في السوق. فارتفاع المعاملات في أشهر محددة، وتمركز النشاط في المدن الكبرى، يشيران إلى وجود مواسم أو محفزات تشغيلية مرتبطة بالانتقال السكني أو الدراسة أو العمل. وهذه البيانات مفيدة لأنها تضيف بُعدًا ثالثًا إلى التقرير: فلدينا هيكل السوق من جهة، والضغط السعري من جهة أخرى، وإيقاع النشاط من جهة ثالثة.

12 Heatmap: توزيع الشرائح الإيجارية حسب المنطقة

rent_region_long <- rent_region |>
  select(region_ar, rent_le_10k, rent_10k_20k, rent_20k_30k, rent_gt_30k) |>
  pivot_longer(
    cols = -region_ar,
    names_to = "band",
    values_to = "units"
  ) |>
  mutate(
    band = recode(
      band,
      rent_le_10k = "≤ 10 آلاف",
      rent_10k_20k = "10–20 ألف",
      rent_20k_30k = "20–30 ألف",
      rent_gt_30k = "> 30 ألف"
    )
  ) |>
  group_by(region_ar) |>
  mutate(share_within_region = units / sum(units)) |>
  ungroup()
rent_region_long |>
  mutate(
    region_ar = fct_reorder(region_ar, units, .fun = sum, .desc = TRUE),
    band = factor(band, levels = c("≤ 10 آلاف", "10–20 ألف", "20–30 ألف", "> 30 ألف"))
  ) |>
  ggplot(aes(x = band, y = region_ar, fill = share_within_region)) +
  geom_tile(color = "white") +
  geom_text(aes(label = percent(share_within_region, accuracy = 0.1)), size = 3) +
  scale_fill_gradient(low = "#f7fbff", high = "#08306b", labels = percent) +
  labs(
    title = "Heatmap لتوزيع الشرائح الإيجارية داخل كل منطقة",
    subtitle = "القيم تمثل نسبة كل شريحة من إجمالي الوحدات المستأجرة داخل المنطقة نفسها",
    x = "شريحة الإيجار",
    y = NULL,
    fill = "النسبة"
  )

12.1 التفسير

يفيد الـ Heatmap في إظهار ما لا تظهره الجداول بسرعة: أين تتمركز كل شريحة داخل كل منطقة. وتبدو الرياض هنا أوضح من غيرها في الشريحتين الأعلى، بينما تظهر مناطق أخرى أكثر تمركزًا في الشريحة المتوسطة. هذه القراءة البصرية تعزز استنتاجًا مهمًا: سوق الإيجار السعودي متعدد البُنى، وليس مسطحًا أو متشابهًا بين المناطق.

13 Bubble chart: الحجم مقابل الشريحة العليا

rent_region |>
  ggplot(aes(
    x = share_of_national_rented_pct,
    y = pct_gt_30k_within_region,
    size = total_rented_units,
    label = region_ar
  )) +
  geom_point(alpha = 0.7, color = "#54278f") +
  geom_text(nudge_y = 1.2, size = 3, check_overlap = TRUE) +
  scale_x_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  scale_y_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  scale_size_continuous(labels = comma) +
  labs(
    title = "حجم السوق الإيجاري مقابل تركّز الشريحة العليا",
    subtitle = "كل فقاعة تمثل منطقة إدارية",
    x = "حصة المنطقة من إجمالي السوق المستأجر",
    y = "نسبة الإيجارات الأعلى من 30 ألف داخل المنطقة",
    size = "عدد الوحدات"
  )

13.1 التفسير

هذا الرسم يفصل بين الحجم والسعر في وقت واحد. فالمنطقة قد تكون كبيرة الحجم لكنها ليست مرتفعة السعر بالضرورة، والعكس صحيح. وعندما تظهر منطقة بحجم كبير ونسبة مرتفعة من الشريحة العليا، فإنها تتحول إلى مركز ضغط سوقي يستحق قراءة منفصلة. وهذا ما يجعل المقارنة البسيطة بعدد الوحدات فقط مقارنة ناقصة.

14 K-means: تصنيف المناطق الإدارية إلى عناقيد سوقية

cluster_data <- rent_region |>
  transmute(
    region_ar,
    market_share = share_of_national_rented_pct,
    high_rent_share = pct_gt_30k_within_region,
    mid_high_share = pct_20k_plus_within_region,
    mid_band_share = pct_10k_20k_within_region,
    low_band_share = pct_le_10k_within_region,
    total_rented_units
  )

cluster_scaled <- cluster_data |>
  select(-region_ar) |>
  scale()

set.seed(123)
k3 <- kmeans(cluster_scaled, centers = 3, nstart = 50)

cluster_results <- cluster_data |>
  mutate(cluster = factor(k3$cluster))
cluster_results |>
  group_by(cluster) |>
  summarise(
    المناطق = paste(region_ar, collapse = "، "),
    متوسط_حصة_السوق = round(mean(market_share), 2),
    متوسط_الشريحة_العليا = round(mean(high_rent_share), 2),
    متوسط_الشريحة_20_فأعلى = round(mean(mid_high_share), 2),
    متوسط_الشريحة_المتوسطة = round(mean(mid_band_share), 2),
    عدد_المناطق = n(),
    .groups = "drop"
  ) |>
  kable(caption = "ملخص عناقيد K-means للمناطق الإدارية")
ملخص عناقيد K-means للمناطق الإدارية
cluster المناطق متوسط_حصة_السوق متوسط_الشريحة_العليا متوسط_الشريحة_20_فأعلى متوسط_الشريحة_المتوسطة عدد_المناطق
1 الرياض، مكة المكرمة 25.79 23.40 62.89 33.44 2
2 القصيم، حائل، الحدود الشمالية، الباحة، الجوف 1.54 2.01 10.40 78.91 5
3 المدينة المنورة، المنطقة الشرقية، عسير، تبوك، جازان، نجران 6.79 3.53 28.15 67.50 6
cluster_results |>
  ggplot(aes(
    x = market_share,
    y = high_rent_share,
    label = region_ar,
    size = total_rented_units,
    shape = cluster
  )) +
  geom_point(alpha = 0.8, color = "#08519c") +
  geom_text(nudge_y = 1.4, size = 3, check_overlap = TRUE) +
  scale_x_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  scale_y_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  scale_size_continuous(labels = comma) +
  labs(
    title = "تصنيف المناطق باستخدام K-means",
    subtitle = "التموضع يعتمد على حجم السوق وتركيز الشريحة العليا مع خصائص سعرية أخرى",
    x = "حصة المنطقة من إجمالي السوق",
    y = "نسبة الإيجارات >30 ألف داخل المنطقة",
    size = "عدد الوحدات",
    shape = "العنقود"
  )

14.1 التفسير

يساعد K-means في الانتقال من القراءة الفردية لكل منطقة إلى قراءة أنماط سوقية. وعادة ما تظهر ثلاثة أنماط تقريبية: أسواق ضخمة مرتفعة الضغط، وأسواق ضخمة متوسطة السعر، وأسواق أصغر وأقل سعريًا. وتكمن فائدة هذه الخطوة في أنها تمنعنا من التعامل مع المناطق بوصفها وحدات منفصلة فقط، وتدفعنا إلى التفكير في منطق السوق الذي يجمع بينها.

15 التوقع القصير الأجل لاتجاه نمو الإيجارات

cpi_model_data <- cpi_rent |>
  filter(!is.na(actual_rent_yoy)) |>
  mutate(
    month_date = ym(month),
    t = row_number()
  )

lm_rent <- lm(actual_rent_yoy ~ t, data = cpi_model_data)

future_periods <- tibble(
  month_date = seq(max(cpi_model_data$month_date) %m+% months(1), by = "1 month", length.out = 6)
) |>
  mutate(
    t = max(cpi_model_data$t) + row_number(),
    fitted = predict(lm_rent, newdata = cur_data())
  )

forecast_plot_data <- bind_rows(
  cpi_model_data |>
    transmute(month_date, value = actual_rent_yoy, type = "فعلي"),
  future_periods |>
    transmute(month_date, value = fitted, type = "متوقع")
)
forecast_plot_data |>
  ggplot(aes(x = month_date, y = value, linetype = type, color = type)) +
  geom_line(linewidth = 1) +
  geom_point(data = subset(forecast_plot_data, type == "فعلي"), size = 2) +
  scale_x_date(date_labels = "%Y-%m", date_breaks = "1 month") +
  scale_y_continuous(labels = function(x) paste0(round(x, 1), "%")) +
  labs(
    title = "اتجاه متوقع قصير الأجل لمعدل نمو الإيجارات الرسمية",
    subtitle = "توقع خطي استكشافي مبني على النقاط المتاحة فقط",
    x = NULL,
    y = "التغير السنوي في الإيجارات",
    linetype = NULL,
    color = NULL
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

future_periods |>
  transmute(
    الشهر = format(month_date, "%Y-%m"),
    `التغير المتوقع في الإيجارات %` = round(fitted, 2)
  ) |>
  kable(caption = "توقعات استكشافية قصيرة الأجل لمعدل نمو الإيجارات")
توقعات استكشافية قصيرة الأجل لمعدل نمو الإيجارات
الشهر التغير المتوقع في الإيجارات %
2026-02 3.58
2026-03 2.70
2026-04 1.83
2026-05 0.95
2026-06 0.07
2026-07 -0.81

15.1 التفسير

يوحي الاتجاه الخطي البسيط بأن نمو الإيجارات الرسمية قد يواصل التراجع التدريجي في الزخم خلال الأجل القصير. لكن الأهم هنا هو التمييز بين تباطؤ النمو وانخفاض الأسعار؛ فالمؤشر قد ينخفض من 5% إلى 4% مثلًا، وهذا يعني أن الأسعار ما زالت ترتفع ولكن بسرعة أقل. كما أن هذا التوقع ينبغي التعامل معه بوصفه إشارة مرجعية لا نموذجًا تنبؤيًا حاسمًا، لأن السلسلة الزمنية المتاحة قصيرة ومركبة منهجيًا.

16 الإجابة المباشرة عن أسئلة البحث

answers_tbl <- tibble(
  `سؤال البحث` = c(
    "ما حجم الإيجار داخل سوق السكن السعودي؟",
    "ما الشريحة السعرية الأكثر انتشارًا؟",
    "هل الضغط الإيجاري متجانس جغرافيًا؟",
    "ما نوع السكن المهيمن على السوق؟",
    "كيف انعكس الإيجار على التضخم الرسمي؟",
    "هل تظهر أنماط سوقية مختلفة بين المناطق؟",
    "ما الاتجاه القصير الأجل المتوقع؟"
  ),
  `الإجابة المختصرة` = c(
    paste0("يمثل الإيجار نحو ", fmt_pct(rent_share, 1), " من المساكن المشغولة بأسر سعودية."),
    paste0("شريحة 10–20 ألف هي الأكبر بنسبة ", fmt_pct(mid_band_share, 1), "."),
    "لا، بل يبدو الضغط أكثر تركّزًا في أسواق كبرى وعلى رأسها الرياض.",
    paste0("الشقق هي النوع الغالب بنسبة ", fmt_pct(apartment_share, 1), "."),
    "كان الإيجار من أهم محركات التضخم في النشرات الرسمية المتاحة.",
    "نعم، وتُظهر العنقدة ثلاثة أنماط تقريبية من الأسواق.",
    "تباطؤ تدريجي في معدل النمو، لا هبوط واسع في الأسعار الاسمية."
  )
)

kable(answers_tbl, caption = "إجابات مختصرة عن أسئلة البحث")
إجابات مختصرة عن أسئلة البحث
سؤال البحث الإجابة المختصرة
ما حجم الإيجار داخل سوق السكن السعودي؟ يمثل الإيجار نحو 32.1% من المساكن المشغولة بأسر سعودية.
ما الشريحة السعرية الأكثر انتشارًا؟ شريحة 10–20 ألف هي الأكبر بنسبة 50.1%.
هل الضغط الإيجاري متجانس جغرافيًا؟ لا، بل يبدو الضغط أكثر تركّزًا في أسواق كبرى وعلى رأسها الرياض.
ما نوع السكن المهيمن على السوق؟ الشقق هي النوع الغالب بنسبة 83.5%.
كيف انعكس الإيجار على التضخم الرسمي؟ كان الإيجار من أهم محركات التضخم في النشرات الرسمية المتاحة.
هل تظهر أنماط سوقية مختلفة بين المناطق؟ نعم، وتُظهر العنقدة ثلاثة أنماط تقريبية من الأسواق.
ما الاتجاه القصير الأجل المتوقع؟ تباطؤ تدريجي في معدل النمو، لا هبوط واسع في الأسعار الاسمية.

17 الاستنتاجات النهائية

  1. الإيجار عنصر مركزي في الاقتصاد السكني السعودي، وليس مجرد خيار هامشي داخل السوق.
  2. الصورة الوطنية متوسطة السعر في المجمل، لكن الضغط غير متجانس جغرافيًا.
  3. الرياض تبرز كسوق أكبر وأكثر ميلًا إلى الشرائح العليا مقارنة بمعظم المناطق الأخرى.
  4. الشقق تمثل العمود الفقري للسوق الإيجاري، ولذلك فهي المفتاح التفسيري لأي تغيرات كلية.
  5. بيانات التضخم تؤكد أن الإيجارات كانت محركًا مهمًا لارتفاع تكاليف المعيشة خلال الفترات المتاحة.
  6. التوقع القصير الأجل يشير إلى تباطؤ في معدل النمو، لا إلى انحسار كامل للضغط الإيجاري.

18 توصيات تحليلية للنسخة البحثية أو المقالية

19 حدود التقرير

20 ملاحق: مصادر مباشرة

20.3 مصادر مساندة للسياق السوقي