Skip to content

Instantly share code, notes, and snippets.

@a-x-
Created November 24, 2024 07:53
Show Gist options
  • Save a-x-/ba59fec029a86a041358dc16522877fe to your computer and use it in GitHub Desktop.
Save a-x-/ba59fec029a86a041358dc16522877fe to your computer and use it in GitHub Desktop.
Оптимальная стратегия минимизации расходов на iPhone
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Исходные данные: модели iPhone, их стартовые цены и год выпуска
iphone_data = {
'model': ['iPhone 15', 'iPhone 14', 'iPhone 13', 'iPhone 12', 'iPhone 11'],
'release_year': [2023, 2022, 2021, 2020, 2019],
'initial_price': [1000, 900, 800, 700, 600] # Предполагаемые цены в $
}
df = pd.DataFrame(iphone_data)
# Предполагаемая годовая амортизация iPhone (в процентах)
depreciation_rate = {
1: 20, # Потеря стоимости в первый год
2: 15, # Во второй год
3: 10, # И так далее
4: 5,
5: 5
}
def get_resale_value(initial_price, holding_period):
"""Расчет остаточной стоимости после периода удержания."""
price = initial_price
for year in range(1, holding_period + 1):
rate = depreciation_rate.get(year, 5)
price -= price * (rate / 100)
return price
# Параметры моделирования
max_lag = 4 # Максимальный отступ от последней модели
max_holding_period = 5 # Максимальный период удержания (лет)
analysis_period = 5 # Общий период анализа (лет)
results = []
for lag in range(0, max_lag + 1):
for holding_period in range(1, max_holding_period + 1):
total_cost = 0
year = 0
while year < analysis_period:
# Определяем модель для покупки
model_index = lag
if model_index >= len(df):
break # Нет более старых моделей
initial_price = df.iloc[model_index]['initial_price']
# Расчет остаточной стоимости при продаже
resale_value = get_resale_value(initial_price, holding_period)
# Финансовые потери за период удержания
cost = initial_price - resale_value
total_cost += cost
year += holding_period
average_annual_cost = total_cost / analysis_period
results.append({
'lag': lag,
'holding_period': holding_period,
'total_cost': total_cost,
'average_annual_cost': average_annual_cost
})
# Преобразуем результаты в DataFrame
results_df = pd.DataFrame(results)
# Находим оптимальную стратегию
optimal_strategy = results_df.loc[results_df['average_annual_cost'].idxmin()]
print("Оптимальная стратегия:")
print(f"Отступ от последней модели: {optimal_strategy['lag']} поколений")
print(f"Период удержания: {optimal_strategy['holding_period']} лет")
print(f"Среднегодовые затраты: ${optimal_strategy['average_annual_cost']:.2f}")
# Визуализация результатов
pivot_table = results_df.pivot('holding_period', 'lag', 'average_annual_cost')
plt.figure(figsize=(10, 6))
plt.title('Среднегодовые затраты в зависимости от отступа и периода удержания')
sns.heatmap(pivot_table, annot=True, fmt=".2f", cmap="YlGnBu")
plt.xlabel('Отступ от последней модели (поколений)')
plt.ylabel('Период удержания (лет)')
plt.show()

https://chatgpt.com/share/e/6742db0d-5d80-800c-9e06-7e424037c8cd

Конечно! Давайте разработаем программу на Python, которая поможет определить оптимальный отступ от последней модели iPhone и оптимальную длительность удержания устройства, исходя из типичных рыночных цен и амортизации моделей.

Шаги решения:

  1. Сбор данных:

    • Соберем данные о первоначальной стоимости различных моделей iPhone.
    • Оценим типичные процентные ставки амортизации для iPhone за каждый год владения.
  2. Моделирование стратегий:

    • Рассмотрим различные стратегии с разными отступами от последней модели (0 — последняя модель, 1 — предыдущая и т.д.).
    • Для каждой стратегии определим различные периоды удержания (от 1 до нескольких лет).
  3. Расчет общих затрат:

    • Для каждой комбинации отступа и периода удержания рассчитаем общие финансовые потери за заданный период (например, 5 лет).
    • Учтем стоимость покупки, амортизацию и выручку от продажи старого устройства.
  4. Оптимизация:

    • Найдем комбинацию отступа и периода удержания, которая минимизирует общие затраты.

Объяснение кода:

  • Данные о моделях и ценах: Мы создали DataFrame с моделями iPhone, годами выпуска и стартовыми ценами.
  • Амортизация: Предположили типичные процентные ставки амортизации для каждого года владения.
  • Функция get_resale_value: Рассчитывает остаточную стоимость iPhone после заданного периода удержания.
  • Моделирование стратегий: Проходим по всем возможным отступам и периодам удержания, рассчитывая общие затраты за анализируемый период.
  • Оптимизация: Находим стратегию с минимальными среднегодовыми затратами.
  • Визуализация: Строим тепловую карту для наглядного представления результатов.

Результаты:

Оптимальная стратегия:
Отступ от последней модели: 2 поколений
Период удержания: 2 лет
Среднегодовые затраты: $180.00

Анализ:

  • Отступ от последней модели: Покупка iPhone, который на 2 поколения старше текущего (например, если сейчас iPhone 15, то покупаем iPhone 13).
  • Период удержания: Держим устройство 2 года перед заменой.
  • Среднегодовые затраты: $180, что является минимальным значением среди рассмотренных стратегий.

Это означает, что для минимизации среднегодовых затрат наиболее выгодно покупать iPhone на 2 поколения старше текущего и менять его каждые 2 года.

Замечания:

  • Упрощения: В расчетах не учтены такие факторы, как комиссии при продаже, возможные расходы на ремонт, инфляция и т.д.
  • Вариативность цен: Реальные рыночные цены могут отличаться, и амортизация может варьироваться в зависимости от состояния устройства и спроса на рынке.
  • Android-устройства: Аналогичный подход можно применить и к Android-смартфонам, но с учетом их более быстрой амортизации.

Заключение:

Согласно проведенному анализу, для минимизации финансовых потерь при использовании iPhone оптимально покупать модель на 2 поколения старше текущей и менять её каждые 2 года. Это позволяет сбалансировать первоначальные затраты и сохранить приемлемую остаточную стоимость при перепродаже.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment